0


优先算法 —— 双指针系列 - 快乐数

1. 快乐数

题目链接:

  1. 快乐数 - 力扣(LeetCode)https://leetcode.cn/problems/happy-number/description/


2. 题目解析

示例1:

示例2:


3. 算法原理

两种情况:我们可以把两种情况都看作为循环,一种循环里都为1,一种都不为1


但是我们还可以将两种情况和为一种情况:从本题题目可以看出本题一定会是循环,所以我们可以只需要判断环里的那个数是否为1就可以了


如何判断链表是否有环

1. 定义快慢指针


**2. 让这两个指针在环的开头开始移动,移动的时候让慢指针每次向右移动1不,快指针向右移动2步 **


3. 判断相遇时候位置的值,如果为1就是快乐数,否则就不是


4. 代码

  1. class Solution {
  2. public:
  3. //返回n每一位的平方和
  4. int Sum(int n)
  5. {
  6. int sum=0;
  7. while(n)
  8. {
  9. int tmp=n%10;//取n的最低位
  10. sum+=tmp*tmp;//将最低位的平方给sum
  11. n/=10;//干掉最低位
  12. }
  13. return sum;
  14. }
  15. bool isHappy(int n) {
  16. //cur指向第一个位置,dest指向第二个位置
  17. int cur=n,dest=Sum(n);
  18. while(cur!=dest)
  19. {
  20. cur=Sum(cur);//走一步
  21. dest=Sum(Sum(dest));//走两步
  22. }
  23. return cur==1;
  24. }
  25. };

未完待续~

标签: 算法

本文转载自: https://blog.csdn.net/hedhjd/article/details/144024130
版权归原作者 迷迭所归处 所有, 如有侵权,请联系我们删除。

“优先算法 —— 双指针系列 - 快乐数”的评论:

还没有评论