1. 题目
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
- 1 2 + 9 2 = 82
- 8 2 + 2 2 = 68
- 6 2 + 8 2 = 100
- 1 2 + 0 2 + 0 2 = 1
简单的水题,用hash表去判断有无重复。一个巧妙的解题思路是,对于循环重复的情况,可以用slow和fast两个变量来代替hash表。
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); } } };
class Solution { public: int cal(int n){ int s = 0; while(n){ s +=(n%10)*(n%10); n /= 10; } return s; } bool isHappy(int n) { if (n < 1) return false; if (n == 1) return true; int slow=n,fast=n; do { slow = cal(slow); fast = cal(fast); fast = cal(fast); }while(slow != fast); if(slow ==1) return 1; else return 0; } };
版权声明:本文为博主原创文章,未经博主允许不得转载。