LeetCode202. 快樂數
阿新 • • 發佈:2020-08-04
按照題目說的規則,不是快樂數的數,會陷入無限迴圈,永遠得不到1,比如18,在第4次迭代的時候計算出來的n是58,在第12次迭代之後n的值還是58,所以就陷入了無限迴圈之中,所以18不是快樂數。
因此,我們可以用一個set,對於每一次迭代就算出來的n,都先去判斷set中是否已經存在這個值了,如果已經存在,說明計算陷入了迴圈,這個數就不是快樂數。
具體做法:每次迴圈先把當前n的值加入集合中,方便之後判斷迴圈,每一次計算n的下一次迭代得到的值newN,newN就是把n的所有位置的數的平方和相加得到的數,然後把newN的值再賦給n。
只要n的值不為1(為1就可以返回true了),或者n的值在set中沒有出現過,就繼續迴圈。
程式碼如下:
class Solution { public: bool isHappy(int n) { set<int> hash; while(true) { hash.insert(n); int newN = 0; //newN是把n的每一位的數的平方和相加得到的數 while(n != 0) { newN += pow(n % 10, 2); n /= 10; } n = newN; if(n == 1) { //退出迴圈有兩種情況:(1)n為1(說明這是一個快樂數) break; } if(hash.count(n) != 0) { //(2)之前的計算中已經出現了現在這個數,說明陷入了無限迴圈,這不是一個快樂數 return false; } } return true; } };