[LeetCode]202. Happy Number(判断正整数是不是Happy Number)

2023-11-15

202. Happy Number

原题链接
Write an algorithm to determine if a number is “happy”.

A happy number is a number defined by the following process: Starting with any positive integer, replace the number by the sum of the squares of its digits, and repeat the process until the number equals 1 (where it will stay), or it loops endlessly in a cycle which does not include 1. Those numbers for which this process ends in 1 are happy numbers.

题目大意:(谷歌翻译)
编写一个算法来确定一个数字是否“开心”。
幸福的数字是由以下过程定义的数字:从任何正整数开始,将数字替换为数字的平方和,并重复该过程,直到数字等于1(将保留在哪里),或者它在不包括1的循环中无休止地循环,这个过程以1结尾的数字是快乐的数字。
注意:并不可以无限循环下去!!!!!!!不是happy number的数字要返回false,刚开始理解错了,懵逼很久….

Example: 19 is a happy number

12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1

思路1:

  • 写一个方法计算平方和
  • 定义两个数slow, fast来记录前后两次得到的平方和
  • 如果前后两个数字相等,进入死循环,这是就需要跳出循环
  • 判断slow是否为1,是的话返回true,否则返回false
  • 参考链接

代码如下:

class Solution {
public:
     bool isHappy(int n) {//3ms
        if(n <= 0)//确保n为正整数
            return false;
        int slow=n, fast=n;
        do{
           slow = digitSquaresSum(slow);//慢指针
           fast = digitSquaresSum(fast);
           fast = digitSquaresSum(fast);//快指针 比慢指针多执行一次digitSquaresSum方法
        }while(slow != fast);//慢指针和快指针结果相同,跳出循环
        if(slow == 1)
            return true;
        else
            return false;
    }
    int digitSquaresSum(int n){//计算平方和
        int squares = 0;
        while(n != 0){
            int temp = n%10;
            squares += (temp*temp);
            n = n/10;
        }
        return squares;
    }
};

思路2:

  • 本来我以为不用哈希表就是最快的解法了,但是天外有人
  • 刚开始我没看懂,就拿之前写的算法测试了1-9这些数字,发现只有1和7返回true,并且不管循环多少次平方和最终还是要小于10的
  • 于是就有了下面的解法

代码如下:

bool isHappy(int n) {//0ms
        if(n == 0) return 0;
        int squares = n;
        while(squares >= 10){
            int temp = 0;
            while(squares) {
                temp += (squares%10)*(squares%10);
                squares = squares/10;
            }
            squares = temp;
        }

        if(squares == 1 || squares == 7)
            return true;
        else
            return false;
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[LeetCode]202. Happy Number(判断正整数是不是Happy Number) 的相关文章

随机推荐

  • 图像&视频编辑工具箱MMEditing使用示例:图像抠图(matting)

    MMEditing的介绍及安装参考 https blog csdn net fengbingchun article details 126331541 这里给出图像抠图的测试代码 论文 Indices Matter Learning to
  • Android Layout设计

    public View onCreateView LayoutInflater inflater ViewGroup container Bundle savedInstanceState Now that CrimeListFragmen
  • 浅谈 one-stage 与 two-stage 目标检测方法

    由于目前实习及找工作的原因 博客更新的频率下降 而在面试过程中也发现 虽然论文是看过了 包括也有输出一些论文笔记 但是很多时候无法形成自己对该领域的一个概括性的认知 无法粗中有细 细中有粗 主要还是基本功不扎实 反应了自己在日常学习中的学习
  • 快速排序(qsort)

    快速排序 排序方法有很多种 选择排序 冒泡排序 归并排序 快速排序等 看名字都知道快速排序是目前公认的一种比较好的排序算法 快速排序的核心思想是二分法 在此 我以升序为例 首先 我们需要选取一个基准数temp 再通过循环比较 将比基准数小的
  • mysql安装版的下载与安装(windows)

    https blog csdn net heting717 article details 73497005 这是安装版 挺方便的
  • soft fork and hard fork

    https bitcoin stackexchange com questions 30817 what is a soft fork https blog csdn net chabuduoxiansheng1 article detai
  • 【OpenAI】《Zotero GPT

    Zotero GPT 如何调教你的GPT 此教程讲述了tag的代码构成 ZoteroGPT中tag的效果就有点像浏览器中的插件 Time Content 0 51 一个tag的基本组成 5 32 tag的工作原理 6 33 删除和新建tag
  • KVM-7、KVM 虚拟机创建的几种方式

    通过对 qemu kvm libvirt 的学习 总结三种创建虚拟机的方式 1 通过 qemu kvm 创建 2 通过 virt install 创建 3 通过 virt manager 创建 在使用这三种创建虚拟机前提是 宿主机必须支持
  • 数据可视化——seaborn(一)

    数据可视化 seaborn 二 简介 seaborn这个库是基于matplotlib并且数据结构与pandas统一的python制图库 seaborn提供了一个高级界面 它是在matplotlib上进行了更高级的API封装 因此使得制图更加
  • Python学习笔记之os.walk()函数

    我们使用os listdir 函数来列出目录下的所有文件和目录放入一个列表进行返回 但是listdir 函数不可对目录的子目录进行扫描 print os listdir 输出 boot dev home proc run sys etc r
  • 前端和后台数据交互总结

    web服务器应用程序 apache tomcat nodeJs Nginx IIS 后台语言 php java net nodeJS 数据库 Mysql SqlServer Oracle 后台mvc ssh ssm 前台mvc js jsp
  • TensorFlow索引与切片语句

    学习课程 1 Basic indexing a tf ones 1 5 5 3 创建tensor a 0 0 结果是5 3的tensor a 0 0 0 结果是1 3的tensor a 0 0 0 1 结果是一个数1 2 Numpy sty
  • python汇总zip文件,压缩包的每个文件格式一样

    汇总zip文件 压缩包的每个文件格式一模一样 from zipfile import ZipFile import pandas as pd import os 打开文件 path r C Users Administrator Deskt
  • gcc/g++ 编译器使用简介

    gcc g 编译器使用简介 原地址 http blogold chinaunix net u3 109487 showart 2153853 html GNU CC 简称gcc 是GNU项目中符合ANSI C标准的编译系统 能够编译用C C
  • WireShark简介和抓包原理及过程

    WireShark 简介 WireShark是一个网络封包分析软件 其功能是记录网络封包 并尽可能显示出最为详细的网络封包信息 WireShark使用WinPCAP作为接口 直接与网卡进行数据报文交换 通俗理解 一个记录网络封包软件 你可以
  • python怎么调用另一个py文件的变量_Python中py文件引用另一个py文件变量的方法

    最近自己初学Python 在编程是遇到一个问题就是 怎样在一个py文件中使用另一个py文件中变量 问题如下 demo1代码 import requests r requests get http www baidu com r encodi
  • 【Linux】常用指令汇总

    目录 1 文件和目录操作 2 进程管理和查询 3 压缩和解压操作 4 系统信息和管理 5 远程和下载操作 6 用户和权限管理 7 时间和日期操作 8 运行和停止程序 9 其他操作 如果这篇文章对你有所帮助 渴望获得你的一个点赞 以下示例涵盖
  • 3S基础知识:VC6.0+MapX编程总结

    一 MapX的帮助 MapX的官方帮助文档是 MapX在线帮助 个人认为 这套文档过于简单 系统性偏差 与ArcEngine的帮助文档不可比 很多MapX的开发技巧在 MapX在线帮助 中查找不到 只能在互联网上搜索 本文试图从一个程序员的
  • 1V转5V芯片,三个元件即可组成完整的稳压方案

    1V低电压要转成5V的电压 需要1V转5V的芯片 由于1V输入 所以不需要指望能输出多大的电流 压差和1V的供电电压意味着供电电流也是无法做大的了 一般1V转5V的输出电流在0MA 100mA 一般60MA应用多 1V转5V电路的BOM物料
  • [LeetCode]202. Happy Number(判断正整数是不是Happy Number)

    202 Happy Number 原题链接 Write an algorithm to determine if a number is happy A happy number is a number defined by the fol