题意
求一个数是不是happy number,定义在官网题目下很清楚,这里就不赘述
我的算法
首先要考虑如果不出现1会怎么样,我猜测是会出现循环的,不然这题无解
题外:总是忘记了求平方要用 power(x,y)而不是 x^2, 导致错误
// c++
class Solution {
public:
bool isHappy(int n) {
set<int> s;
pair<set<int>::iterator,bool> ret;
while(n != 1){
int count(0);
//拆解并计算sum
while (n > 0){
count += (n%10)*(n%10);
n /= 10;
}
// 给 n 赋值
n = count;
ret = s.insert(n);
if(ret.second == false) return false; //如果在其中查询到了n说明开始循环出现了,则一定不会出现1的,所以失败
}
return true;
}
};
//java
public class Solution {
public boolean isHappy(int n) {
HashSet<Integer> s = new HashSet<Integer>(); // hashset里面只能是具体的类型,而不能是primate类型,也就是基本的数据类型,所以不能用int
while(n != 1){
int count = 0;
while(n>0) {
count += Math.pow(n%10,2);
n /= 10;
}
n = count;
if (!s.add(n)) return false;
}
return true;
}
}