链接
题目
如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。
例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 ,因为差值 (6, -3, 5, -7, 3) 是正负交替出现的。
相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是摆动序列,第一个序列是因为它的前两个差值都是正数,第二个序列是因为它的最后一个差值为零。
子序列 可以通过从原始序列中删除一些(也可以不删除)元素来获得,剩下的元素保持其原始顺序。给你一个整数数组 nums ,返回 nums 中作为 摆动序列 的 最长子序列的长度 。
示例
示例 1:
输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1示例 2:
输入:n = 2
输出:false
说明
1 <= n <= 2e31 - 1
思路一(模拟)
我们可以很自然地作出一个假设,只要循环了够多次数后(例如50次),数字n如果能变成1,那么就能变成,如果在这么多次之后还没变成1,那么可能就已经进入了其他的死循环,永远无法变成1,因此,模拟足够多次的这个过程即可。
C++ Code
class Solution {
public:
bool isHappy(int n) {
int time=50;
while(time)
{
int newn=0;
while(n)
{
int a=n%10;
n = n/10;
newn+=a*a;
}
n=newn;
time--;
if(n==1) return true;
}
return false;
}
};
思路二(快慢指针)
待更
思路三(哈希集)
待更