快乐树
題目中說了會 「無限循環」,那么也就是說「求和的過程中,sum會重復出現,這對解題很重要!」
當我們遇到了要快速判斷一個元素是否出現集合里的時候,就要考慮哈希法了。
所以這道題目使用哈希法,來判斷這個sum是否重復出現,如果重復了就是return false, 否則一直找到sum為1為止。
判斷sum是否重復出現就可以使用unordered_set。
「還有一個難點就是求和的過程,如果對取數值各個位上的單數操作不熟悉的話,做這道題也會比較艱難?!?/p> class Solution { public:int getsum(int n){// 取數值各個位上的單數之和int sum=0;while(n){sum+=(n % 10) * (n % 10);//取個位相乘n/=10;//取十位}return sum;}bool isHappy(int n) {unordered_set<int> myset;while(1){int sum=getsum(n);if(sum==1) return true;if(myset.find(sum)!=myset.end()){// 如果這個sum曾經出現過,說明已經陷入了無限循環了,立刻return falsereturn false;}else{myset.insert(sum);}n=sum;} return true; } };
總結