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
解题思路:
方法一:使用set保存中间值,每次判断中间结果是否在set中,或者判断中间结果是否为1.。
方法二:利用Happy Number的一个性质。。https://en.wikipedia.org/wiki/Happy_number
// using set costs 4ms class Solution { public: bool isHappy(int n) { set<int>s; if(n==0)return false; s.insert(n); while(true){ int tmp=0; while(n){ tmp+=(n%10)*(n%10); n/=10; } n=tmp; if(n==1)return true; if(s.find(n)!=s.end())return false; s.insert(n); } return false; } }; // https://en.wikipedia.org/wiki/Happy_number // Happy_number has attribute all happy number ends in 1,all non-happy number ends in 4; // costs 0ms sometimes class Solution { public: bool isHappy(int n) { if(n==0)return false; int tmp=0; while(n!=1&&n!=4){ while(n){ tmp+=(n%10)*(n%10); n/=10; } n=tmp; tmp=0; } return n==1; } }; |
没有评论:
发表评论