lintcode-easy-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

1^2 + 9^2 = 82 8^2 + 2^2 = 68 6^2 + 8^2 = 100 1^2 + 0^2 + 0^2 = 1

 

这道题的做法是就是把一个正数不断求各个数位的平方和,如果得到了1,就返回true,否则把结果存在一个set里,如果一旦出现重复的数,说明不能得到1,所以不是happy number

public class Solution {
    /**
     * @param n an integer
     * @return true if this is a happy number or false
     */
    public boolean isHappy(int n) {
        // Write your code here
        if(n <= 0)
            return false;
        if(n == 1)
            return true;
        
        HashSet<Integer> set = new HashSet<Integer>();
        int num = n;
        
        while(!set.contains(num)){
            set.add(num);
            
            int next = 0;
            
            while(num > 0){
                next += (num % 10) * (num % 10);
                num /= 10;
            }
            
            if(next == 1)
                return true;
            else 
                num = next;
        }
        
        return false;
    }
}

 

posted @ 2016-02-25 07:35  哥布林工程师  阅读(306)  评论(0编辑  收藏  举报