当前位置: 首页 > news >正文

【LeetCode】202. 快乐数 - hash表 / 快慢指针

目录

  • 2023-9-5 09:56:15
  • 2023-9-6 19:40:51

在这里插入图片描述

202. 快乐数

2023-9-5 09:56:15

关键是怎么去判断循环:

  • hash表:
    每次生成链中的下一个数字时,我们都会检查它是否已经在哈希集合中。
    • 如果它不在哈希集合中,我们应该添加它。
    • 如果它在哈希集合中,这意味着我们处于一个循环中,因此应该返回 false
  • 快慢指针:
    跟踪两个值,称为快跑者和慢跑者。在算法的每一步中,慢速在链表中前进 1 个节点,快跑者前进 2 个节点(对 getNext(n) 函数的嵌套调用)。
    • 如果 n 是一个快乐数,即没有循环,那么快跑者最终会比慢跑者先到达数字 1。
    • 如果 n 不是一个快乐的数字,那么最终快跑者和慢跑者将在同一个数字上相遇。
class Solution {public boolean isHappy(int n) {HashSet<Integer> set = new HashSet<>();while (n != 1 && !set.contains(n)) {set.add(n);n = getNum(n);}return n == 1 ;}/*** 19 -> 1^2 + 9^2 = 82*/private int getNum(int n) {int totalSum = 0;while (n > 0) {int add = n % 10;n = n / 10;totalSum = n * n;}return totalSum;}
}

2023-9-6 19:40:51

第二次写的,使用的是hash表进行判断循环。

但是写的时候,由于过于自信了,但是还是有小问题出现:比如说私有方法忘记了返回值,忘记把数放到hash表里面。

下次需要注意这些问题:“无论会不会,都需要按照自己的想法一步一步来。”

附上代码:

class Solution {public boolean isHappy(int n) {Set<Integer> set =  new HashSet<Integer>();while ( n != 1 && !set.contains(n)){set.add(n);n = getNum(n);}return n ==1;}private int getNum(int n){int total = 0;int num = 0;while(n != 0){num = n % 10;n = n / 10;total += num * num;}return total;}
}
http://www.lryc.cn/news/156383.html

相关文章:

  • 什么是多态性?如何在面向对象编程中实现多态性?
  • 【目标检测】理论篇(3)YOLOv5实现
  • IDEA爪哇操作数据库
  • 一文速学-让神经网络不再神秘,一天速学神经网络基础(七)-基于误差的反向传播
  • C++ 异常处理——学习记录007
  • 【BIM+GIS】“BIM+”是什么? “BIM+”技术详解
  • Flink算子如何限流
  • 垃圾分代收集的过程是怎样的?
  • NPM 常用命令(四)
  • Anaconda虚拟环境下导入opencv
  • Linux设备驱动程序
  • mybatis <if>标签判断“0“不生效
  • 企业数据的存储形式与方案选择
  • 图像处理简介
  • adb server version (19045) doesn‘t match this client (41); killing.的解决办法
  • 实验室的服务器和本地pycharm怎么做图传
  • Vue + Element UI 前端篇(五):国际化实现
  • [ROS]虚拟机ubuntu18.04系统里面运行usb_cam
  • 常用通讯协议比较
  • 鼠标键盘管理 ShareMouse for Mac最新
  • 【ALM工具软件】上海道宁与Perforce为您带来用于整个生命周期的应用程序生命周期管理软件
  • Android图形-架构2
  • 文字验证码:简单有效的账号安全守卫!
  • Shell 运算符及语法结构
  • 为什么要建前缀索引?
  • vite介绍
  • 2023年软件测试常见面试题
  • 关于const指针的一个常见误区
  • @alilclowcode-engine-ext@1.0.5 不支持安装react@^16.3.0
  • Python之列表操作和内存模型