題目地址:
https://leetcode.com/problems/happy-number/
對一個int作如下操作,將其十進制每一位求平方和,不斷重複,如果能在有限步到,就返回true,否則返回false。可以用一個哈希表存儲每一步操作後得到的數,如果某次操作沒有得到,但得到了之前得到過的數,那就返回false;若得到了新數,則加入哈希表;否則如果得到了,就返回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;
}
}