首页 > 其他分享 >LeetCode 202. 快乐数

LeetCode 202. 快乐数

时间:2023-10-24 21:32:48浏览次数:34  
标签:202 val int sum ret 我们 快乐 LeetCode

快乐数

题目链接 202. 快乐数

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

  • 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
  • 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
  • 如果这个过程 结果为 1,那么这个数就是快乐数。

如果 n快乐数 就返回 true ;不是,则返回 false

示例 1:

输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

题目解释

什么是快乐数,就是将我们数的每一位数计算他的平方,判断他是否是1,如果不是是1,我们持续上面的操作,直到我们遇到1,那么这个数就是快乐数.如果我们无法得到1,那么就是不快乐的.

算法原理

下面我们用两个例子来解析我们如何解决这道题目.

  • val是快乐数
  • val不是快乐数

我们发现,无论val是不是快乐数,我们都会陷入下面的情况.

20231023_210430

20231023_210430_1

这里很容易的想到我们在链表中判断是是否存在环.那么就可以使用快慢指针了.

  • 快指针走2步
  • 慢指针走1步

细节补充

  • 快慢指针中快指针走2步,慢指针走1步为何可以判断有环,这里不再解释,可以看看链表相关的
  • 我们上面经过若干次判断,难道一定会生成环的情况吗?不能是一条直线吗
  • 如何快速转换val的值

如果我们分析了题目中的快乐数的第二条定义,那么我们可以隐约猜到一定会存在环.这里也是可以简单的说明一下.我们说下鸽巢原理

鸽巢原理一般含义为:如果每个抽屉代表一个集合,每一个苹果就可以代表一个元素,假如有n+1个元素放到n个集合中去,其中必定有一个集合里至少有两个元素.

我们看一下我们的数据范围

  • 1 <= n <= 2^31^ - 1

image-20231023165451139

这里我们会发现,对于我们每一次的val经过转换,都会出现在[0, 810]的结果内,只要我们转换超过810次,那么一定会出现重复的元素.

解决我们如何一次的转换val的值,很简单,提取每一位的值,经过平方后保存下来

int bitSum(int val)
{
    int sum = 0;
    while (val)
    {
      int ret = val % 10;
      sum += ret * ret;
      val /= 10;
    }
    return sum;
}

代码编写

class Solution
{
public:
  int bitSum(int val)
  {
    int sum = 0;
    while (val)
    {
      int ret = val % 10;
      sum += ret * ret;
      val /= 10;
    }
    return sum;
  }
  bool isHappy(int n)
  {
    int slow = n;
    int fast = n;
    while (true)
    {

      slow = bitSum(slow);
      fast = bitSum(bitSum(fast));
      if (slow == fast)
        break;
    }

    return slow == 1;
  }
};

标签:202,val,int,sum,ret,我们,快乐,LeetCode
From: https://blog.51cto.com/byte/8010223

相关文章

  • LeetCode 11. 盛最多水的容器
    盛水最多的容器题目链接11.盛最多水的容器给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。**说明:**你不能倾斜容器......
  • LeetCode 611. 有效三角形的个数
    有效三角形的个数题目链接611.有效三角形的个数给定一个包含非负整数的数组nums,返回其中可以组成三角形三条边的三元组个数。示例1:输入:nums=[2,2,3,4]输出:3解释:有效的组合是:2,3,4(使用第一个2)2,3,4(使用第二个2)2,2,3示例2:输入:nums=[4,2,......
  • .NET周刊【10月第2期 2023-10-08】
    国内文章起风了,NCC云原生项目孵化计划https://www.cnblogs.com/liuhaoyang/p/ncc-the-wind-rises.html2016年,我和几位朋友发起了.NETCore中文学习组和ASP.NETCore文档翻译项目,随后创建了.NETCoreCommunity开源社区,吸引了近30个优秀的开源项目加入。然而,随着时间的推移,社区......
  • [Leetcode] 0100. 相同的树
    100.相同的树题目描述给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例1:输入:p=[1,2,3],q=[1,2,3]输出:true示例2:输入:p=[1,2],q=[1,null,2]输出:false示例3:......
  • P9669 [ICPC2022 Jinan R] DFS Order 2
    DescriptionP有一棵树,根节点是\(1\),总共有\(n\)个节点,从\(1\)到\(n\)编号。他想从根节点开始进行深度优先搜索。他想知道对于每个节点\(v\),在深度优先搜索中,它出现在第\(j\)个位置的方式有多少种。深度优先搜索的顺序是在搜索过程中访问节点的顺序。节点出现在第\(j......
  • 2023-10-24 react+ts 遍历双重对象嵌套数组
    useEffect(()=>{if(value){constarr=value;for(constkinarr){console.log(k,arr[k]);arr[k].key=arr[k].id;arr[k].title=arr[k].name;for(constk2inarr[k].children){arr[k2]......
  • 2024届毕业-找工作历程
    学历:双非硕士  研究方向:基于深度学习的滚动轴承故障诊断  2024年应届毕业生掌握语言:Python1.2023/09/10 投递   长鑫存储  ---微信公众号投递 研发技术类 产品认证与测试 学历要求:硕士  -----已凉研发技术类 缺陷分析研发(J12777)硕士   ......
  • CSP2023邮寄
    省流:\(100+100+40+0=240\)。Day\([-5,-2]\)全停课。模拟赛。之前模拟赛发挥都还好的,最后的两场接连爆炸。一场T1卡2h,一场T2\(n=400\)自以为推出了\(n^3\lnn\)的正解,结果后来保龄才发现只对\(L=1\)适用,被\(n^4\)薄纱。Link但是我认为不失为一种好的思路,放在这里,......
  • 2023 CSP-S 游记
    2023CSP-S游记赛前看到同机房大佬fwj找了个角落喝奶茶不去校门口,很疑惑但走了。进学校上了个厕所,晃了一会进考室了。赛时先看题,T1暴力,T2有一点思路,T3大模拟,T4神秘树上问题,没啥思路。0.5h写完T1,暴力题。T2最开始想的就是记录\(pr_i\)表示上一个可以和他匹配的,也就是......
  • 2023 GDCPC 广东省赛 ACDIK
    The2023GuangdongProvincialCollegiateProgrammingContestACDIK去年打了这场,当时没有补题,现在来直面恐惧。A.ProgrammingContest思路:签到//AConemoretimes//nndbk#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintmod=1e9......