LeetCode-202. Happy Number
2018-01-15 11:24
375 查看
Description
Example
Solution 1(C++)
class Solution { public: bool isHappy(int n) { set<int> temp; int sum=0; while(temp.count(n)==0){ temp.insert(n); while(n==1){return true;} while(n!=0){ int i=n%10; sum+=i*i; n=n/10; } n=sum; } return false; } };
Solution 2(C++)
class Solution { public: bool isHappy(int n) { set<int> temp; while(temp.count(n)==0){ temp.insert(n); while(n==1){return true;} int sum=0; while(n!=0){ int i=n%10; sum+=i*i; n=n/10; } n=sum; } return false; } };
算法分析
题目意思就是要判断一个数是否符合要求,就要计算该数各位数字的平方和,如果平方和等于1,那么就返回true,如果不等于1,那么就往下尝试,如果发现有重复的出现,说明进入了循环,那么就返回false。所以,这个比较困难的就是如何设计较好的程序。
程序分析
程序比较重要的有两点:现在,我的答案有两个,那么请问哪一个是对的呢?需要好好观察一下,这两个程序中不一样的地方。
关键不同的地方就是sum的初始化问题。解法一的sum初始化是在while循环外,所以在后面的循环中,sum的值不是总为0.正确的做法是将sum的初始化放入while循环中,这样,在求新的sum之前,旧的sum能置0.
然后,可以学习一下while的语句特点:
while(条件){ 条件为真时执行语句; } 条件为假时执行语句;
所以,这道题三个while语句的设置还是要多想一想。
相关文章推荐
- Leetcode 202 Happy Number
- leetcode 202. Happy Number
- [leetcode]: 202. Happy Number
- leetcode 202. Happy Number
- leetcode202. Happy Number
- [LeetCode]: 202: Happy Number
- [leetcode] 202.Happy Number
- leetcode 202. Happy Number
- [leetcode] 202. Happy Number
- leetcode 202. Happy Number
- [LeetCode] 202. Happy Number 快乐数
- 202. Happy Number - leetcode
- LeetCode202—Happy Number
- LeetCode 202. Happy Number
- leetcode 202 Happy Number
- LeetCode 202. Happy Number
- #leetcode#202. Happy Number
- leetcode202. Happy Number
- leetcode——202——Happy Number
- Leetcode 202:Happy Number