理解一个数的快乐过程
用官方的图来给大家解释:
- 这是快乐的数
- 这是被困于自生,无法快乐的数
- 我们不禁会去想,一个数一直平方和一直平方和,会不会无穷大?
告诉你,还真的不会大到无穷大。可以看出,四位数会跳回三位数,更有说服力的是,最大的13位数,会跳回四位数。
附:运行截图
所以我想到了哈希表的去重,那么来吧!
还有就是:原谅我最近都在主用哈希表解决问题,因为我在刷哈希表模块的题!
哈希表
开始用了递归,但是涉及到层数太多,就直接while循环了!
public static boolean isHappy(int n) {
Set<Integer> set=new HashSet<>();
//判断是否为1,true
while(n!=1&&!set.contains(n)){
set.add(n);
n=isnn(n);
System.out.println(n);
}
return n==1;
}
public static int isnn(int n){
//计算下一个数字
int index=0;
String s=String.valueOf(n);
char[] c=s.toCharArray();
for (int i=0;i<c.length;i++){
index+=(Integer.parseInt(String.valueOf(c[i])))*(Integer.parseInt(String.valueOf(c[i])));
}
return index;
}
执行效果不是很好,改进isnn方法
public static boolean isHappy(int n) {
Set<Integer> set=new HashSet<>();
//判断是否为1或者重复数
while(n!=1&&!set.contains(n)){
set.add(n);
n=isnn(n);
System.out.println(n);
}
return n==1;
}
public static int isnn(int n){
//计算下一个数字
int sum=0;
while (n>0){
int m=n%10;
n=n/10;
sum+=m*m;
}
return sum;
}
学以致用
- m=n%10 取m的最后一位数
- n=n/10 去除n的最后一位数
char、int、String之间的串门
- char、int转String
String.valueOf(char、int、char[]) - String转 char、int
1、int n=Integer.parselint(String s)
2、char c=s.charAt(0);
3、char[] c=s.toCharArray(); - char转int
1、int n=Integer.paesetInt(String.valueof ( c ))
2、int n=(int)c-(int)(‘0’) - int转char
char c=(char)(n+‘0’)