202. Happy Number
这道题算法没什么好说的。就是recursion搞一下。
这题难的地方是证明。
怎么证明你的算法不会stack overflow, 怎么证明它不会数据太大崩掉?
对于一个m位的数来说,按照happy number的下一个数是最多是81 * m
n > 10 ^ (m - 1)
当 m >= 4的时候,下一个数永远比当前的数小。
所以这个范围不会超过 1000
看一下代码
class Solution {
public boolean isHappy(int n) {
Set<Integer> visited = new HashSet<>();
return helper(n, visited);
}
private boolean helper(int n, Set<Integer> visited) {
if (n == 1) return true;
if (!visited.add(n)) return false;
int next = 0;
while (n > 0) {
next += (n % 10) * (n % 10);
n /= 10;
}
return helper(next, visited);
}
}
网友评论