您的位置:首页 > 移动开发

202. Happy Number

2016-05-30 21:52 357 查看
1.我的答案

这里我假设输入最大值为 2147483647, 则10位的数字经过计算后也不过810,因此我开辟811的数组来存。

class Solution {
public:
int isH(int n, vector<int>& num){
int sum = 0;
while(n){
int yu = n % 10;
sum += yu*yu;
n = n / 10;
}
return sum;
}
bool isHappy(int n) {
vector<int>num(811,0);
int res = n;
while(1){
res = isH(res, num);
if(num[res] !=0)
return false;
if(res - 1 == 0)
return true;
num[res] = 1;
}
return false;
}
};

2.别人的答案 用了快慢指针。 当有环时,slow==fast; 当无环时,fast会先到1,则可以判断出。

int digitSquareSum(int n) {
int sum = 0, tmp;
while (n) {
tmp = n % 10;
sum += tmp * tmp;
n /= 10;
}
return sum;
}

bool isHappy(int n) {
int slow, fast;
slow = fast = n;
do {
slow = digitSquareSum(slow);
fast = digitSquareSum(fast);
fast = digitSquareSum(fast);
if(fast == 1) return 1;
} while(slow != fast);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ hashtable