Leetcode刷题 202.快乐数

很多前端的同学对数据结构和算法这块没有太多的概念,很多leetcode的题目看不懂,有时候可能看了题解也不知道是什么意思。上一篇我们对链表的数据结构有了了解,下面根据题目来练习一下

202. 快乐数

题目

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

「快乐数」 定义为:

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

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

题解

这道题我们可以转换为判断一个链表是否有环

比如:

  1. 如果遍历某个节点为1,说明链表没环,就是快乐数
  2. 如果遍历到重复的节点值,说明有环,就不是快乐数

我们用两张图来表示: 没环,是快乐数的图:

有环,不是快乐数的图: 下面我们来实现下代码:

js 复制代码
var isHappy = function (n) {
  let pre = n, cur = getNext(n)

  while (pre !== cur && cur !== 1) {
    pre = getNext(pre)
    cur = getNext(getNext(cur))
  }

  return cur === 1
}

首先我们需要定义两个快慢指针。pre表示慢指针,每次只走一步。cur表示快指针,每次走两步。这里我们提前让快指针先走一步。getNext表示向后走一步的方法。

我们的循环条件是要满足两个条件:

  1. 快慢指针不能相当,如果相等则说明有环,那么就不是快乐数(也就是为什么上面让快指针先走一步)
  2. 快指针不能为1,如果为1则说明是快乐数 最后返回的时候,只需要判断cur是否为1就可以了,如果为1,则说明是快乐数。如果不为1,则快慢指针相等的时候退出的循环,则说明是有环的,那就不是快乐数。

那么我们来看下getNext是怎么实现的。

js 复制代码
var getNext = function (n) {
  let t = 0
  while (n) {
    t += (n % 10) * (n % 10)
    n = Math.floor(n / 10)
  }
  return t
}

那n = 19来举例说明。

t += (n % 10) * (n % 10), (n % 10)。通过n % 10可以找到个位数的值,也就是9,那么t就是 9 * 9,然后通过n = Math.floor(n / 10)来把个位数去掉,19/10为1.9, Math.floor(1.9)为1, n就为1,进入下一次循环,每次循环的结果t叠加,就可以得到我们希望的值。

完整代码:

js 复制代码
var isHappy = function (n) {
  let pre = n, cur = getNext(n)

  while (pre !== cur && cur !== 1) {
    pre = getNext(pre)
    cur = getNext(getNext(cur))
  }

  return cur === 1
}



var getNext = function (n) {
  let t = 0
  while (n) {
    t += (n % 10) * (n % 10)
    n = Math.floor(n / 10)
  }

  return t
}

欢迎大家点赞评论,大家一起学习一起进步!!!

相关推荐
社交怪人几秒前
【奇偶ASCII值】信息学奥赛一本通C语言解法(题号1042)
算法
前端与小赵2 分钟前
快速生成安卓证书并打包生成安卓apk(保姆教程)
android·前端
Cxiaomu7 分钟前
MentorPi A1 底盘接入开发实践:让自研Web系统接管机器人底盘
前端·机器人
小欣加油19 分钟前
leetcode3635 最早完成陆地和水上游乐设施的时间II
数据结构·c++·算法·leetcode
程序员海军34 分钟前
沪漂五周年了:我越来越迷茫了
前端·人工智能·后端
GUO_PP43 分钟前
win11英雄联盟打开以后,自动改变音效,开启免提模式的问题修正
人工智能·算法
一天 24h1 小时前
Vue3父子组件传值:从零到精通
前端·javascript·vue.js·pycharm·npm·学习方法
大家的林语冰1 小时前
CSS 新函数上市,一行代码让文本自动变色,无需 JS 也能符合 W3C 无障碍对比度标准
前端·javascript·css
爱勇宝1 小时前
前端工程师的下一站:不是失业,而是 AI Engineer
前端·javascript·架构
变量未定义~1 小时前
排列数字、 n-皇后问题
数据结构·算法