【数据结构】集合set | 平方和无限循环

81 阅读1分钟

题目一 202. 快乐数 - 力扣(LeetCode)

image.png

问题:

  1. 如何计算每个位置数字的平方和? 答:n % 10得到个位,再除以10得到新的n,重复步骤,直到n=0
  2. 无限循环怎么判断? 答:将每次平方和的结果存储到set集合中,若出现过不会重复添加
  3. 快乐数是平方和为1就可以了吗? 答:yes,一旦有一次平方和为1,那么接下来无限循环为1
  4. 什么情况不是快乐数? 答:记录平方和重复的那个数字,若不为1,则不是快乐数
  5. 平方和一定会无限循环吗? 答:不一定,但是只要重复出现了一次,就一定会无限循环了

代码:

class Solution {
    public boolean isHappy(int n) {
        Set<Integer> record = new HashSet<>();
        while(n != 1 && !record.contains(n)){
            record.add(n);
            n = sumresult(n);
        }
        return n == 1;
    }
    public int sumresult(int n) {
        int sum = 0;
        while(n>0) {
            int tmp = n % 10;
            sum += tmp * tmp;
            n = n/10;
        }
        return sum;
    }
}