【Leetcode】202. Happy Number

題目地址:

https://leetcode.com/problems/happy-number/

對一個int作如下操作,將其十進制每一位求平方和,不斷重複,如果能在有限步到11,就返回true,否則返回false。可以用一個哈希表存儲每一步操作後得到的數,如果某次操作沒有得到11,但得到了之前得到過的數,那就返回false;若得到了新數,則加入哈希表;否則如果得到了11,就返回true。代碼如下:

import java.util.HashSet;
import java.util.Set;

public class Solution {
    public boolean isHappy(int n) {
        // 將存儲當前得到的數的變量初始化爲n
        int cur = n;
        // set記錄每次操作得到的數
        Set<Integer> set = new HashSet<>();
        // 如果得到的數不是1,則嘗試加入set;若加入失敗,說明有重複,返回false,否則繼續重複操作
        while ((cur = squareSum(cur)) != 1) {
            if (!set.add(cur)) {
                return false;
            }
        }
        
        return true;
    }
    
    private int squareSum(int n) {
        int sum = 0;
        while (n != 0) {
            int a = n % 10;
            sum += a * a;
            n /= 10;
        }
        
        return sum;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章