题目来源
题目描述
题目解析
模拟
class Solution {
public:
bool isHappy(int n) {
std::set<int> set;
set.insert(n);
while (n != 1){
int sum = 0;
while (n != 0){ // 2
sum += std::pow(n % 10, 2); // ans = 4
n = n / 10; // 0
}
if(set.count(sum)){
return false;
}
set.insert(sum);
n = sum;
}
return true;
}
};
快慢指针
怎么检测环呢?快慢指针
class Solution {
int getNext(int n){
int sum = 0;
while(n > 0)
{
int bit = n % 10;
sum += bit * bit;
n = n / 10;
}
return sum;
}
public:
bool isHappy(int n) {
int slow = n, fast = n;
do {
slow = getNext(slow);
fast = getNext(getNext(fast));
}while (fast != slow);
return fast == 1;
}
};
类似题目
题目 | 思路 |
---|---|
leetcode:258. 各位相加 Add Digits | 模拟、找规律 |
leetcode:202. n是不是快乐数 Happy Number | 检测环 |
leetcode:263. n是不是丑数Ugly Number | |
leetcode:141. 判断链表中有没有环 Linked List Cycle |