题目链接点击打开链接
这个题比较有意思。是我第一次碰到这样的题。因为题目中说的是如果这个数不是快乐的。那么在他给的算法中会无限循环。但是程序中无法判断是不是无限循环,所以我根本找不到一个方法。题目中给了一个标签。说是hashtable。开始我知道是要把结果放到table里面但是还是不知道如何判断无限循环。后来在路上的时候突然想起来,只要出现在table里面的值一定是无限循环。因为一个数的分解结果是一定的。如果回到之前出现的结果,那么一定会回到现在的这个数。有点类似于深度优先的反向边。
public class Solution {
public boolean isHappy(int n) {
if(n==0)
{
return false;
}
HashSet<Integer> hash=new HashSet<Integer>();
int length=0;
int arr[];
while(true)
{
if(hash.add(n))
{
length=(int)Math.log10(n)+1;
arr=new int[length];
for(int i=0;i<length;i++)
{
arr[i]=n%10;
n/=10;
}
n=0;
for(int i=0;i<length;i++)
{
n+=arr[i]*arr[i];
}
if(n==1)
{
return true;
}
}
else
{
return false;
}
}
}
}
出错经历
无
这个具有历史意义。第一次一次通过!希望以后多多发生这种情况