LeetCode202 快樂數
阿新 • • 發佈:2018-12-16
題目
編寫一個演算法來判斷一個數是不是“快樂數”。 一個“快樂數”定義為:對於一個正整數,每一次將該數替換為它每個位置上的數字的平方和,然後重複這個過程直到這個數變為 1,也可能是無限迴圈但始終變不到 1。如果可以變為 1,那麼這個數就是快樂數。
示例
輸入: 19 輸出: true 解釋: 12 + 92 = 82 82 + 22 = 68 62 + 82 = 100 12 + 02 + 02 = 1
C++程式碼
首先將數字n逐位存入vector容器中(方便計算平方和),然後將其平方和與1進行比較,相同則返回true,不同則繼續。 但是注意,非快樂數永遠不會出現平方和等於1的情況,所以如果不設定停止條件,會死迴圈。可以設定為,當得到的平方和已經出現過,則說明它不是快樂數,返回false。
class Solution { public: bool isHappy(int n) { vector<int> nums; vector<int> save; getnum(n,nums); int sum=calculate(nums); while(sum!=1) //平方和等於1,跳出迴圈,返回true { //若平方和已經出現過,則返回false if(find(save.begin(),save.end(),sum)!=save.end()) return false; else { save.push_back(sum); //未出現,則儲存下來 getnum(sum,nums); sum=calculate(nums); } } return true; } void getnum(int n,vector<int> &num) //逐位儲存到vector容器中(逆序) { num.clear(); while(n) { num.push_back(n%10); n/=10; } } int calculate(vector<int> num) //計算平方和 { int sum=0; for(vector<int>::iterator iter=num.begin();iter!=num.end();iter++) sum=sum+(*iter)*(*iter); return sum; } };