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

LeetCode 202. 快乐数

时间:2023-05-07 19:33:43浏览次数:48  
标签:202 return int sum getsum 求和 快乐 LeetCode

题目链接:LeetCode 202. 快乐数

题意:

本题是让我们判断一个数是否是快乐数,题干中给出了快乐数的条件。

解题思路:

方法一:

在题干中指出,如果一个数不是快乐数的话,那么它的各个位上的数字的平方和会无限循环,始终变不到1,

也就是说求和的过程中,sum会重复出现,因此我们抓住这一关键特征,判断在求和的过程中,sum是否循环出现,如果循环出现,就判定该数字不是快乐数,直接return false

否则直到求和sum为1为止。

完整代码如下:

func isHappy(n int) bool {

    // 题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!
    // 所以这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。
   
    set:=make(map[int]bool) 
    for n != 1 && !set[n] {
        n, set[n] = getsum(n), true
    }
    return n == 1
}
func getsum(n int)int{
    sum := 0
    for n > 0{
        tmp := n%10  //求一个数上 各个位上的数字
        sum += tmp*tmp
        n/=10
    }
    return sum
}

方法二:

1、 为什么一定是会循环出现:
有题干给出的数据范围可知,1 <= n <= 2^31 - 1,也就是说n最多有10位即最大的数为9999999999(10个9),那么此时求和sum = 9910=810,

因此,求和sum和取值范围就是[0,810],一共811个数,因此,当我们求和操作的次数超过811次时,(例如812次)必然会有两个数字相等,

那么此时如果这个重复的数是 1 ,则是快乐数,否则不是快乐数。

2、 当发生循环出现时,是不是相当于出现的环,也就是说一个数,经过多次的变换,最终出现了循环,这不就类似LeetCode 142. 环形链表 II这道题,

如下图所示:

此时我们就是要判断在链表的环中,数字是否是1,如果是1,则一定是快乐数,否则不是。

完整代码如下:

func isHappy(n int) bool {

    fast:=getsum(n)  //初始时,快指针比慢指针多走一步
    slow:=n //慢指针初始时,还没进行操作

    for fast != slow {
        fast = getsum(getsum(fast))   //快指针每次走两步
        slow = getsum(slow)  //慢指针每次走一步
    }
    return fast == 1


}
func getsum(n int)int{   //求和函数
    sum:=0
    for n > 0 {
        sum += (n%10) * (n%10)
        n/=10
    }
    return sum 
}

标签:202,return,int,sum,getsum,求和,快乐,LeetCode
From: https://www.cnblogs.com/lxing-go/p/17379911.html

相关文章

  • 【2023.05.07】再见,福州大学
    五一回了一趟学校,想见见学弟,以及收拾一下宿舍第一天晚上九点多差不多到学校,到学校的第一件事就是去和学弟吃烧烤嘛,两年没见的学弟了,之前他因为个人原因所以休学了一年,现在看到他现在好多了,我很开心还见到了吧主和一些学弟网友,很开心网上大家都自称鼠鼠,没想到线下都是帅哥,交流......
  • LeetCode 349. 两个数组的交集
    题目链接:LeetCode349.两个数组的交集题意:本题题意是让我们找出两个数组中的交集,注意交集中不能出现重复元素解题思路:思路比较常规,先遍历数组num1,对于每个首次出现的数字,对应位置上的数值+1,再遍历数组num2,判断当前数字是否在num1中出现,如果出现,就加入到结果集中完整代码如......
  • P9166 [省选联考 2023] 火车站
    P9166[省选联考2023]火车站这道题很抽象,有这么几点注意事项1,火车必须走到尽头才可以停下,所以答案一定会出于输入的这些端点2,火车只能往一个方向走,不可以在中途换向那么这题怎么处理?不会真的要一波操作然后把所有答案排个序吧?我选择标记法!标记答案,省去了排序的过程。那么......
  • LeetCode 242. 有效的字母异位词
    题目链接:LeetCode242.有效的字母异位词题意:本题是要判断两个字符串s和t,是否是字母异位词,所谓字母异位次就是如果s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。解题思路:首先我们很容易想到,最简单的思路就是先遍历一遍s字符串,统计出每个字母出现的次数......
  • Leetcode11~20题整理
    11.盛最多水的容器比较暴力的做法:classSolution{public:intmaxArea(vector<int>&h){vector<int>t;intn=h.size();intres=-1;for(inti=0;i<n;i++){for(intj=0;j<(int)t.size(......
  • 使用IDEA2023创建springMVC项目,web项目
    1.使用idea2022创建web项目 2.新建模块 3.编写文件名,记住如果想单独一个项目,不想被包括在其他项目里面就取消位置后面的地址,它有可能是上一个项目的主文件 4.创建完主要项目以后要添加web模块,先选中需要添加web项目的模块,再店家上方+号,选择 web模块 3.修改部......
  • .NET周报 【4月第5期 2023-04-30】
    国内文章基于Github平台的.NET开源项目模板.嘎嘎实用!https://www.cnblogs.com/NMSLanX/p/17326728.html大家好,为了使开源项目的维护和管理更方便一些,出于个人需求写了一款开源项目的模板,该模板基于Github平台,并使用.NET来实现管道功能.在接受过实战检验后,于今......
  • LeetCode 134.加油站
    1.题目:在一条环路上有n 个加油站,其中第i 个加油站有汽油 gas[i] 升。你有一辆油箱容量无限的的汽车,从第i个加油站开往第i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发,开始时油箱为空。给定两个整数数组gas和cost,如果你可以绕环路行驶一周,则返回......
  • 美团面经总结(2023最新)
    分享一份读者面试美团的面经,比较有参考性,感兴趣的可以看看~一面消息队列如何保证可靠性消息队列如何保证消息幂等性消息队列的优缺点为什么用b+树聚集索引和主键区别,其他引擎怎么做的平时数据库编码explain参数http报文参数有哪些吗?做题,链表奇偶有序输出二面自我介......
  • 2023.5.7——软件工程日报
    所花时间(包括上课):6h代码量(行):0行博客量(篇):1篇今天,上午学习,下午学习并开会。我了解到的知识点:1.了解了一些数据库的知识;2.了解了一些python的知识;3.了解了一些英语知识;5.了解了一些Javaweb的知识;4.了解了一些数学建模的知识;6.了解了一些计算机网络的知识;......