鉴于刚放完寒假,状态不是特别好,再加上第一次接触leetcode,所以第一周就挑一条简单的题先找找感觉。
description:
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
- 12 + 02 + 02 = 1
由例子不难推出,如果某一步的结果与前面出现过的结果相同的话,便会继续进行相同的步骤,进入死循环,因此我们可以用一个向量,将每一步的结果记入数组中,如果某一步的结果与前面的出现的结果相同的话便跳出循环,将其与1比较,若与1相等则是开心数,否则不是。
代码如下:
class Solution {
public:
public:
bool isHappy(int n) {
vector<int> a;
while (1) {
vector<int> a;
while (1) {
if(n==1)break;
int sum = 0;
int flag=0;
while (n) {
sum += pow((n % 10),2);
n /= 10;
}
n = sum;
for(int i=0;i<a.size();i++)
{
if(a[i]==sum)
{
flag=1;
break;
}
}
if(flag)break;
if(!flag) a.push_back(n);
}
if(n==1)return 1;
int sum = 0;
int flag=0;
while (n) {
sum += pow((n % 10),2);
n /= 10;
}
n = sum;
for(int i=0;i<a.size();i++)
{
if(a[i]==sum)
{
flag=1;
break;
}
}
if(flag)break;
if(!flag) a.push_back(n);
}
if(n==1)return 1;
else return 0;
}
};
}
};
这道题难度较低,但是却耗费了不少时间,证明我的写代码能力还有待加强,以后应当加强这方面的练习。