今天在importNew上看到一篇总结面试问题的文中,里面说到一个开心数算法,比较好奇就看了下。
长时间没有写代码,对于一些基本的东西都不熟悉,为了能把多位数字拆成单位数字,想了很久,到最后都没想到除法(/)和 取余数(%),最后想的方法还绕了很大一圈,下面是源码:(本来还想用递归,但是没能成功)
package com.test;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
public class BaseTest {
public static void main(String[] args) {
BaseTest bt = new BaseTest();
System.out.println(bt.isHappy(19));
System.out.println(bt.isHappy(20));
System.out.println(bt.isHappy(69));
System.out.println(bt.isHappy(5786));
System.out.println("-----------others-----------");
System.out.println(bt.isHappy1(19));
System.out.println(bt.isHappy1(20));
System.out.println(bt.isHappy1(69));
System.out.println(bt.isHappy1(5786));
}
//自己写的开心数算法
private boolean isHappy(int in){
boolean flag = false;
int sum = in;
ArrayList<Integer> list = new ArrayList<Integer>();
while(!list.contains(sum)){
list.add(sum);
sum = recursion(sum);
if(sum == 1){
flag = true;
break;
}
}
return flag;
}
private int recursion(int var){
int sum = 0;
String str = "" + var;
int a1[] = new int[str.length()];
for(int i = 0; i < str.length(); i++){
a1[i] = Integer.parseInt("" + str.charAt(i));
}
for(int i : a1)
sum += Math.pow(i, 2);
return sum;
}
//网上找的开心数算法
public boolean isHappy1(int n) {
Set<Integer> set = new HashSet<Integer>();
while(mul(n)!=1){
if(set.contains(mul(n))){
return false;
}
set.add(mul(n));
mul(n);
n = mul(n);
}
return true;
}
public int mul(int n){
int sum = 0;
while(n!=0){
int x = n%10;
sum = sum + (int)Math.pow(x,2);
n = n/10;
}
return sum;
}
}
参考:http://blog.youkuaiyun.com/diu_brother/article/details/5107543
http://blog.youkuaiyun.com/derrantcm/article/details/47997637