码迷,mamicode.com
首页 > 移动开发 > 详细

leetcode: Happy Number

时间:2015-04-22 13:56:15      阅读:155      评论:0      收藏:0      [点我收藏+]

标签: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

  • 12 + 92 = 82
  • 82 + 22 = 68
  • 62 + 82 = 100
  • 12 + 02 + 02 = 1

这是一道新题, 我的想法是直接模拟,到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;
    }


leetcode: Happy Number

标签:java基础   leetcode   java   hashtable   happynumber   

原文地址:http://blog.csdn.net/gotobar/article/details/45193515

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!