202. Happy Number

来源:互联网 发布:店宝宝软件好不好 编辑:程序博客网 时间:2024/06/18 07:38

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

解法一:Language - Java Run Time - 1ms
解题思路:快乐数(happy number)有以下的特性:在给定的进位制下,该数字所有数位(digits)的平方和,得到的新数再次求所有数位的平方和,如此重复进行,最终结果必为1。不是快乐数的数称为不快乐数(unhappy number),所有不快乐数的数位平方和计算,最後都会进入 4 → 16 → 37 → 58 → 89 → 145 → 42 → 20 → 4 的循环中。

public boolean isHappy(int n) {        if(n == 1) {            return true;        }else if(n == 37)        {            return false;        }else        {            int result = 0;            while(n > 0){                result += (n % 10) * (n % 10);                n /= 10;            }            return isHappy(result);        }    }

解法二:Language - Java Run Time - 4ms
解题思路:HashSet + 递归

public boolean isHappy(int n) {        if(n <= 0) return false;        if(n == 1) return true;        HashSet<Integer> set = new HashSet<Integer>();        return isHappyNum(n, set);    }    public boolean isHappyNum(int n, HashSet<Integer> set)    {        int result = 0;        while(n != 0){            result += (n % 10) * (n % 10);            n /= 10;        }        if(result == 1){            return true;        }else if(set.contains(result)){ //存在无限循环            return false;        }else        {            set.add(result);            return isHappyNum(result, set);        }    }
0 0