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

LeetCode150道面试经典题-- 快乐数(简单)

1.题目

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

「快乐数」 定义为:

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

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

2.示例

示例 1:

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

示例 2:

输入:n = 2
输出:false


3.思路

快慢指针法
         如果观察规律可以发现如果不是快乐数则会一直陷入一个循环之中。如图

此时可以定义两个指针,一个快指针,一个慢指针。快指针一次能走两格,慢指针只能一次走一格 。但是两者最后都会遇到,如果快指针先遇到1则结束循环或者龟兔两者相遇,此时就需要判断两者的数字,如果遇到的值并不是1,那么就说明不存在快乐数。

4.代码

LeetCode代码

class Solution {public boolean isHappy(int n) {int slowPointer = n;int quickerPointer = getNext(n);while (quickerPointer!=1 &&quickerPointer!=slowPointer){quickerPointer = getNext(getNext(quickerPointer));slowPointer = getNext(slowPointer);}return quickerPointer==1;}public int getNext(int n){int sum =0;while (n>0){sum += Math.pow(n%10,2);n = n/10;}return  sum;}
}

时间复杂度O(logn)空间复杂度O(1)

具体案例代码:

package LeetCode19;public class javaDemo {public static void main(String[] args) {boolean flag ;int n = 4;
//        乌龟int slowPointer = n;
//        兔子int quickerPointer = getNext(n);
//        当兔子不是1或者两者还未相遇的时候则两者继续前进while (quickerPointer!=1 &&quickerPointer!=slowPointer){quickerPointer = getNext(getNext(quickerPointer));slowPointer = getNext(slowPointer);}
//        当兔子遇到1或者龟兔相遇时候判断龟兔相遇的时候值是否为1flag = quickerPointer==1;
//        输出结果System.out.println(flag);}
//    计算每一个的数字的平方和public static  int getNext(int n){
//        定义累计和int sum =0;while (n>0){sum += Math.pow(n%10,2);n = n/10;}return  sum;}
}

会了?试试挑战下一题!♪(^∀^●)ノシ (●´∀`)♪

LeetCode150道面试经典题-- 汇总区间(简单)_Alphamilk的博客-CSDN博客

http://www.lryc.cn/news/129096.html

相关文章:

  • 科研论文配图----第一章笔记
  • OpenHarmony Meetup 广州站 OpenHarmony正当时—技术开源
  • 如何使用PHP Smarty模板实现静态页面生成
  • 【 Cocos Creator 项目实战】益智游戏《2048》(附带完整源码工程)
  • 剑指Offer68-II.二叉树的最近公共祖先 C++
  • 【JAVA】我们该如何规避代码中可能出现的错误?(一)
  • openLayers实战(八):坐标系及其转换
  • DAY06_SpringBoot—简介基础配置yaml多环境开发配置整合第三方技术
  • 无涯教程-Perl - setpwent函数
  • 代码随想录-数组篇
  • vue3+element-plus表格默认排序default-sort失效问题
  • CH32V203 单片机 I2C 使用
  • 链表OJ题
  • Llama 2免费托管及API提供
  • 回到未来:使用马尔可夫转移矩阵分析时间序列数据
  • vue element 多图片组合预览
  • Vue2集成Echarts实现可视化图表
  • 3 Python的数据类型
  • new String()到底创建了几个对象
  • 第五十五天
  • 【推荐】深入浅出benan的生命周期
  • mysql使用redis+canal实现缓存一致性
  • 9.利用matlab完成 泰勒级数展开 和 符号表达式傅里叶变换和反变换 (matlab程序)
  • 文字点选验证码识别(上)-YOLO位置识别
  • ssh远程连接慢解决方法
  • 10.4K Star!程序员为程序员针对性优化的开源免费笔记
  • ppt中线材相交接的地方,如何绘画
  • [VS/C++]如何更好的配置DLL项目中的成品输出
  • REC 系列 Visual Grounding with Transformers 论文阅读笔记
  • Linux常用命令总结