今天在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; sum = sum + (int)Math.pow(x,2); n = n/10; } return sum; } }参考:http://blog.csdn.net/diu_brother/article/details/5107543
http://blog.csdn.net/derrantcm/article/details/47997637
https://leetcode.com/problems/happy-number/