【算法专题突破】双指针 - 快乐数(3)

这篇具有很好参考价值的文章主要介绍了【算法专题突破】双指针 - 快乐数(3)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. 题目解析

2. 算法原理

3. 代码编写

写在最后:


1. 题目解析

题目链接:202. 快乐数 - 力扣(Leetcode)

【算法专题突破】双指针 - 快乐数(3),算法专题训练,c++,算法

这道题的题目也很容易理解,

看一下题目给的示例就能很容易明白,

但是要注意一个点,最后有可能无限循环无法到达1。

这个时候我们就要想一下怎么判断他是无线循环呢?

实际上,当他在进行平方和的计算中,同一个数字再次出现的时候,

就证明他进入无限循环了,来看个例子:

【算法专题突破】双指针 - 快乐数(3),算法专题训练,c++,算法

如果我们计算 2 是不是快乐数,当再次出现 4 这个数的时候,

我们就可以知道,他进入无限循环了。 

2. 算法原理

我们可以想象一下,

题目给出的两种情况,其实都是一个循环,

如果是快乐数,就会一直循环得到1,

如果不是快乐数,就会按照自己的节奏循环,永远到不了1,

这个时候吗,我们就可以用快慢指针的思想来做这道题,

让一个指针走两步,一个指针走一步,当两个指针相遇的时候,

他们肯定已经开始循环了,如果相遇的时候,

值为1就是快乐数,如果值不为1就证明不是快乐数。

3. 代码编写

class Solution {
public:
    bool isHappy(int n) {
        int fast = n, slow = n;
        while(true) {
            slow = Sum(slow);
            fast = Sum(Sum(fast));
            if(fast == slow) break;
        }
        return fast == 1;
    }
private:
    int Sum(int n) {
        int sum = 0;
        while(n) {
            int tmp = n % 10;
            sum += tmp * tmp;
            n /= 10;
        }
        return sum;
    }
};

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~文章来源地址https://www.toymoban.com/news/detail-676501.html

到了这里,关于【算法专题突破】双指针 - 快乐数(3)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【算法专题突破】双指针 - 盛最多水的容器(4)

    目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 题目链接:11. 盛最多水的容器 - 力扣(Leetcode)   这道题目也不难理解, 两边的柱子的盛水量是根据短的那边的柱子决定的, 而盛水量就是短的柱子的高度 * 宽度即可。  这道题可以用暴力枚举,两层for循环,肯定是可

    2024年02月10日
    浏览(37)
  • 【算法专题突破】双指针 - 有效三角形的个数(5)

    目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 题目链接:611. 有效三角形的个数 - 力扣(Leetcode)  我们可以根据示例1来理解这一道题目, 他说数组里面的数可以组成三角形三条边的个数, 那我们先自己枚举一下所有情况看看:  【2, 2, 3】  【2, 2, 4】  【2,

    2024年02月10日
    浏览(46)
  • 【算法专题突破】双指针 - 和为s的两个数字(6)

    目录   1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 题目链接:剑指 Offer 57. 和为s的两个数字 - 力扣(Leetcode)  这道题题目就一句话但是也是有信息可以提取的, 最重要的就是开始的那句话,“递增序列” 然后在数组中找出两个和为s的数即可(而且是任意一对即可)

    2024年02月09日
    浏览(35)
  • 【算法专题--双指针算法】leecode-202. 快乐数(medium)、leecode-11. 盛最多水的容器(medium)

    🍁你好,我是 RO-BERRY 📗 致力于C、C++、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 双指针 常见的双指针有两种形式,一种是对撞指针,⼀种是左右指针。 对撞指针:一般用于顺序结构中

    2024年03月23日
    浏览(39)
  • 【LeetCode 算法专题突破】滑动窗口(⭐)

    学完了双指针算法,滑动窗口那肯定是逃不掉了,我个人感觉他俩就不分家,不把滑动窗口的题目好好刷上一刷我都难受 先来一道经典的滑动窗口试试水 题目链接:209. 长度最小的子数组 其实滑动窗口题目的解法都大同小异,我们基本上写几道题目,就能很好的掌握这个算

    2024年02月07日
    浏览(53)
  • 【优选算法】双指针 -- 快乐数 和 盛最多水的容器

    前言: 🎯个人博客:Dream_Chaser 🎈刷题专栏:优选算法篇 📚本篇内容:03快乐数 和 04盛最多水的容器 目录 一、快乐数(medium) 1. 题⽬链接:202. 快乐数 2. 题⽬描述: 3. 题⽬分析: 4.算法原理 二、盛最多水的容器 1. 题⽬链接:11.盛最多水的容器 - 力扣(LeetCode) 2. 题⽬描述

    2024年04月17日
    浏览(34)
  • 【算法专题突破】滑动窗口 - 长度最小的子数组(9)

    目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 题目链接:209. 长度最小的子数组 - 力扣(Leetcode)  要注意的是,题目给的是正整数, 而题目要求并不难理解,就是找最短的子数组。 如果使用暴力的话,就是一个O(N3)的算法,复杂度很高, 我们可以用滑动窗口来做,

    2024年02月09日
    浏览(32)
  • 【算法专题突破】二分查找 - x 的平方根(18)

    目录 1. 题目解析 2. 算法原理 3. 代码编写 写在最后: 题目链接:69. x 的平方根 - 力扣(LeetCode) 这道题就是求算数平方根, 要注意的点是他只需要保留整数部分,小数部分会舍去 我们确定好一个区间 1 ~ x,数字 x 的算数平方根一定在这里面, 最简单的思路就是用暴力解法

    2024年02月07日
    浏览(39)
  • 【算法挨揍日记】day02——双指针算法_快乐数、盛最多水的容器

    202. 快乐数 https://leetcode.cn/problems/happy-number/ 编写一个算法来判断一个数  n  是不是快乐数。 「快乐数」  定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是  无限循环  但始终变不到 1。 如果这

    2024年02月11日
    浏览(37)
  • 【算法优选】双指针专题——壹

    常⻅的双指针有两种形式,⼀种是 对撞指针 ,⼀种是 左右指针 对撞指针 :⼀般⽤于顺序结构中,也称左右指针。 对撞指针从两端向中间移动。⼀个指针从最左端开始,另⼀个从最右端开始,然后逐渐往中间逼近。 对撞指针的终⽌条件⼀般是两个指针相遇或者错开(也可能

    2024年02月08日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包