首页 > 代码库 > Happy Number Leetcode

Happy Number Leetcode

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就算不是happy number了。。。但其实要一直加,直到出现循环为止。。。
 
所以题意也不能想当然啊。理解了之后就好做了。
 
public class Solution {
    public boolean isHappy(int n) {
        int sum = 0;
        Set<Integer> s = new HashSet<>();
        while (true) {
            int tmp = n % 10;
            n = n / 10;
            sum = sum + tmp * tmp;
            if (n == 0) {
                if (sum != 1 && s.contains(sum)) {
                    break;
                } else if (sum == 1) {
                    return true;
                } else {
                    s.add(sum);
                    n = sum;
                    sum = 0;
                }
            }
        }
        return false;
    }
}

top solution和我的解法差不多,但我感觉我自己的可读性好些?这是我的错觉么?

Top solution:

public boolean isHappy(int n) {
    Set<Integer> inLoop = new HashSet<Integer>();
    int squareSum,remain;
    while (inLoop.add(n)) {
        squareSum = 0;
        while (n > 0) {
            remain = n%10;
            squareSum += remain*remain;
            n /= 10;
        }
        if (squareSum == 1)
            return true;
        else
            n = squareSum;

    }
    return false;

}

它有个比较好的点是hashset里面如果已经存在了的数字,add方法会返回false,这个之前不知道,学习了。

Happy Number Leetcode