Happy Number算法submit了好几次,才最终测试通过,总结一下。
1. Happy Number定义
给定一个整数,将每一位数字的平方加起来,得出来一个和,继续将这个和的每一位数字的平方加起来,不断循环,如果最终的和是1的话,那么该整数即为Happy Number.
举例:
Input: 19
Output: true
Explanation:
1^2 + 9^2 = 82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
2. 算法基本思想
1)取余运算得到最后一位数
2)求取平方,累加
3)除法运算得到十位靠左的所有数
4)如果这个除法结果为0,那么运算完成,开始对结果进行循环1 -3 的运算
基本的思想就可以完成了,但是有一个地方需要注意的是,如果给定的数字是2,那么处理结果是这样的:
2,4,16,37,58,89,145,42,20,4,16,37.......
这样就进入了死循环了,需要做处理。
3. 参考代码
下面是我的参考算法代码:
class Solution {
public:
bool isHappy(int n) {
int result = 0;
int temp = n;
vector<int> resultVect;
int numbersResult = 0;
if (n < 0 || n > numeric_limits<int>::max()) return false;
while (temp) {
result += pow(temp%10, 2);
temp = temp/10;
if (temp == 0) {
// check for loops endlessly
resultVect.push_back(result);
numbersResult = 0;
for (auto & x : resultVect) {
if (x == result) numbersResult++;
if (numbersResult == 2) return false;
}
if (result == 1) return true;
temp = result;
result = 0;
}
}
return false;
}
};