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

打印 上一主题 下一主题

主题 1814|帖子 1814|积分 5442

1. 快乐数

   题目链接:
  202. 快乐数 - 力扣(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. };
复制代码

未完待续~

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

乌市泽哥

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表