您的位置:首页 > 移动开发

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语句的设置还是要多想一想。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: