标签:java基础 leetcode java hashtable happynumber
题意:
Write an algorithm to determine if a number is "happy".
A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers.
Example: 19 is a happy number
这是一道新题, 我的想法是直接模拟,到1就返回,如果进入了一种循环,那就永远到不了1了。怎么去检测这个循环是一个问题,点开tags,里面写着分类是hashtable,突然觉得只要记录过程中出现过的每一个平方和就可以了。这个平方和的范围可以估计一下,int型数的范围32位下上限是4294967296,也就是10位,9*9*10的话也才810,我开一个1000的数组就可以完成这个工作了。
整个模拟过程就是,
1.对每一个循环的当前数字求各位平方和
2.如果平方和等于1,那么返回true
3.如果平方和不为1,去标记数组中寻找,如果出现过,说明出现循环了,返回false
4.把这个下标的数组元素做标记,表示出现过了
下面上代码:
public static boolean isHappy(int n) { int[] hash = new int[1000]; for(int i=0;i<1000;i++){ hash[i] = 0; } int m = n; boolean flag = false; while(true){ m=getSum(m); if(m==1){ flag = true; break; }else if(hash[m]==1||m==n){ break; } hash[m] = 1; } return flag; } public static int getSum(int n){ int sum = 0; while(n>0){ int t = n%10; sum += t*t; n /= 10; } return sum; }
标签:java基础 leetcode java hashtable happynumber
原文地址:http://blog.csdn.net/gotobar/article/details/45193515