標籤:leetcode 演算法 c++
題目描述
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
本題比較簡單,題目要求對任意一個正整數,不斷各個數位上數位平方和,若最終收斂為1,則該數字為happy number,否則程式可能從某個數開始陷入迴圈。這道題目我們只用根據規則進行計算,並使用一個雜湊表儲存已經出現過的數字即可。
class Solution {public: bool isHappy(int n) { if (n < 1) return false; if (n == 1) return true; unordered_set<int> showedNums; showedNums.insert(n); while(true) { int s = 0; while(n) { s += (n % 10) * (n % 10); n = n / 10; } if (s == 1) return true; else if (showedNums.find(s) != showedNums.end()) return false; n = s; showedNums.insert(s); } }};
LeetCode (24) Happy Number