unordered_set
为什么用unordered_set呢?题目中也没有要求查找元素呀。
但是判断是否为快乐数的过程中,我们需要查找是否有重复元素出现过,有则返回false。unordered_set能解决这个问题。一旦读题发现,一个元素是否出现在集合里,就要考虑用哈希法了。
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>nums;
while(1){
int sum=getSum(n);
if(sum==1){
return true;
}
if(nums.find(sum)!=nums.end()){
return false;
}else{
nums.insert(sum);
}
n=sum;
}
}
};
为什么不用数组?
前面的总结提到过,使用数组查找元素,要尽可能在一个确定的范围内,本题n值一直变化,且变化的范围太大,数组面对这么大差值的元素,需要开辟很多控件存放元素,造成极大的空间浪费,属实没必要。