202-Happy Number

【题目】

  写一个算法判断一个数是否"happy"

  一个"happy"数的定义如下:开始于任意一个正整数,将该数替换为所有位上的数的平方和,然后重复这个过程直到这个数等于1,或者它可能无限循环(不包括1),这些结束于1的为"happy"数

  举例: 19是一个"happy"数

    12+92=82

      82+22=68

    62+82=100

    12+02+02=1

【分析】

  1.主要的问题是如何结束循环

  2.记录一个HashMap,将每次计算过后的数存入map中,当下一次遇到就直接返回false

【算法实现】

public class Solution {
    public boolean isHappy(int n) {
        Map<Integer,Boolean> map = new HashMap<Integer,Boolean>();
        int sum = helper(n);
        while(sum != 1) {
            if(map.get(sum) != null && map.get(sum) == true) {
                return false;
            }
            map.put(sum,true);
            sum=helper(sum);
        }
        return true;
    }
    
    public int helper(int n) {
        int res = 0;
        while(n != 0) {
            int i = n%10;
            res += i*i;
            n = n/10;
        }
        return res;
    }
}

 

posted @ 2015-05-21 14:07  hwu_harry  阅读(142)  评论(0编辑  收藏  举报