leetcode: Happy Number

题意:

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;
    }


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值