做题总结 202. 快乐数

202. 快乐数

  • 思路分析
  • 代码实现-Java
  • 代码优化

思路分析

本人没有思路
在看题的时候,我不知道如果 不是快乐数怎么处理。我感觉是会死循环,一直加下去。没有考虑到会有重复数字出现。

为什么不会进行死循环?(为什么会有重复数字出现?)

详情请看力扣。

位数目前的数字下一个数字
1981
299162
3999243
49999324
109999999999810
1399999999999991053

2^31 = 2147483648
2^31-1 = 2147483647;
十位的9(9999999999)已经比2^31-1大了。按照题意 它的下一个数为810,810是三位。我们找到下一个为四位的数,也就是13个9。

对于 3 位数的数字,它的下一个不可能大于 243。这意味着它要么被困在 243以下的循环内,要么跌到 1。

4 位或 4 位以上的数字在每一步都会丢失一位,直到降到 3 位为止。

所以我们知道,最坏的情况下,算法可能会在 243 以下的所有数字上循环,然后回到它已经到过的一个循环或者回到 1。但它不会无限期地进行下去,所以排除无限循环的情况。

代码实现-Java

class Solution {
    public boolean isHappy(int n) {
        Set<Integer> myset = new HashSet<Integer>();
        int num = n;
        int sum= 0;

        while(true) {
            //求出这个和
            sum = 0;
            while(num != 0) {//这里不能写 while(num)
                int tmp = num % 10;
                sum += tmp*tmp;
                num /= 10;
            }

            if(sum == 1) {return true;}

            if(myset.contains(sum)) {
                //无限循环
                return false;
            } else {
                myset.add(sum);
            }

            num = sum;
        }
    }
}

在这里插入图片描述

代码优化

函数提取:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。这个功能会多次利用,因此应该提取出一个函数。这里用private就是同类中的函数才能访问。

private int getSum(int num) {
    int sum= 0;
    while(num != 0) { //这里不能写 while(num)
        int tmp = num % 10;
        sum += tmp*tmp;
        num /= 10;
    }
    return sum;
}

while(true)和里面的 return true,false可以做调整。而且sum和n可以合并。

//摘自力扣
public boolean isHappy(int n) {
    Set<Integer> seen = new HashSet<>();
    while (n != 1 && !seen.contains(n)) {
        seen.add(n);
        n = getNext(n);
    }
    return n == 1;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/261855.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DevOps系列文章 : 使用dpkg命令打deb包

创建一个打包的目录&#xff0c;类似rpmbuild&#xff0c;这里创建了目录deb_build mkdir deb_build目标 我有一个hello的二进制文件hello和源码hello.c, 准备安装到/opt/helloworld目录中 步骤 在deb_build目录创建一个文件夹用于存放我的安装文件 mkdir helloworld在he…

SAP 特殊采购类30简介---标准委外

前面我们已经测试了很多的特殊采购类,今天我们测试一个在SAP系统中非常基本的功能—采购外协,通常采购外协和工序外协经常会被放在一起讨论方案,同时每个PP模块顾问和MM模块顾问所必需的。这个功能技术上讲不是很难,需要理解这个外协的意思。采购外协有时也会被称为标准外协…

[MySQL]用基本的mysql语句写的{商店的数据}和{学生成绩}

文章目录 前言一、题目二、创建2.写入table 三.查看表单结构四.插入数据1.俩种方法2.指定插入 五.查询1.全部和指定查询2.别名查询3.去重4.排序5.条件查询&#xff08;where) 六.修改七.删除八.在table中插入一列总结&#xff1a; 前言 提示&#xff1a;以下是本篇文章正文内容…

Temporary failure in name resolution

报错&#xff1a; 1.打开resolv.conf文件 sudo vim /etc/resolv.conf 2. 确保resolv.conf文件至少包含一个名称服务器。列出名称服务器的行应如下所示&#xff1a; 3. 保存文件并退出。 4. 接下来&#xff0c;重新启动DNS 解析器服务。运行以下命令&#xff1a; sudo syste…

探索未来交通!空客、宝马开启新一轮“量子计算挑战赛”

12月6日&#xff0c;空中客车公司和宝马集团共同发起了一项名为 “量子交通探索”的全球量子计算挑战赛&#xff0c;以应对航空和汽车领域最紧迫的挑战——这些挑战对于传统计算机而言仍然是难以克服的。 这项挑战是首创性的&#xff0c;它将两个全球行业领导者聚集在一起&…

Pytest+Requests+Allure实现接口自动化测试

一、整体结构 框架组成&#xff1a;pytestrequestsallure设计模式&#xff1a; 关键字驱动项目结构&#xff1a; 工具层&#xff1a;api_keyword/参数层&#xff1a;params/用例层&#xff1a;case/数据驱动&#xff1a;data_driver/数据层&#xff1a;data/逻辑层&#xff1a…

windows VMWare 安装虚拟机-保姆级教程,涵盖网络配置

1、虚拟机是什么 虚拟机&#xff08;Virtual Machine&#xff0c;简称 VM&#xff09;是一种运行在物理计算机上的软件实体&#xff0c;它模拟了一台完整的计算机系统。虚拟机可以在一台物理计算机上同时运行多个操作系统和应用程序&#xff0c;每个虚拟机都被分配了独立的计算…

C#攻克反爬虫之代理IP爬取

目录 前言 一、什么是代理IP 二、代理IP的获取 1. 免费代理IP网站 2. 第三方API 三、C#实现代理IP爬取 1. 安装HtmlAgilityPack和HttpClient 2. 获取代理IP 3. 使用代理IP发送请求 四、常见问题及解决方案 1. 代理IP的可用性 2. 频繁更换代理IP 总结 前言 随着互…

坚持提升这个能力,让你越来越强大

哈喽&#xff0c;你好啊&#xff01;我是雷工。 今天在读《张一鸣管理日志》时&#xff0c;看到这么一句话&#xff1a; “产品创新要从根本上解决问题&#xff0c;而不是想办法绕过问题&#xff0c;解决的问题很可能就是将来的核心竞争力。” 这让我想起了亚马逊公司&#x…

还在用QQ拼音输入法吗?赶快卸载吧~!

最近总觉得我的C盘在莫名其妙的减少。之前的电脑C盘只有240G&#xff0c;所以我很在意C盘空间。但是&#xff0c;我发现买了新电脑&#xff0c;C盘空间也在莫名其妙减少。 随挨个文件夹检查。最后发现&#xff0c;QQ拼音的 dict 文件夹很大&#xff0c;居然有 30G多G。 30多~…

图片曝光修正方法(直方图均衡和CNN)

图像过曝或曝光不足时需要曝光处理&#xff0c; 这里以曝光不足举例。 直方图均衡法&#xff1a; 通过RGB通道的直方图均衡达到处理曝光不足的效果。 代码&#xff1a; underexpose cv2.imread("exposure_test.jpg") #underexpose cv2.cvtColor(underexpose, cv2…

leetcode 1314. 矩阵区域和(优质解法)

代码&#xff1a; class Solution {public int[][] matrixBlockSum(int[][] mat, int k) {int mmat.length;int nmat[0].length;int[][]answernew int[m][n]; //要返回的结果矩阵int[][]sumnew int[m1][n1]; //前缀和数组//初始化前缀和数组for(int i1;i<m;i){for(int…

Java泛型-13

泛型的好处 public class Demo01 {public static void main(String[] args) {Person<String> person new Person<String>("韩曙平");} }class Person<E>{ //创建时才定义数据类型 编译时就可以进行约束E str;public Person(E str){this.str str…

Github项目推荐:在线rename

项目地址 GitHub - JasonGrass/rename: 在线文件批量重命名 项目简介 一个开源的在线重命名文件工具。利用了新的浏览器API获取文件句柄&#xff0c;在不上传文件的情况下对文件进行重命名。可以作为前端文件操作api学习范例。 项目截图

PropTypes 在 React 中的使用心得

在 React 开发中&#xff0c;PropTypes 是一个非常有用的库&#xff0c;用于对组件的属性进行类型检查。它可以帮助我们在开发过程中捕获潜在的错误&#xff0c;提高代码的可靠性和可维护性。本文将介绍 PropTypes 的基本用法和一些使用心得。 一、什么是 PropTypes PropTypes…

Android 权限申请

在Android中&#xff0c;从Android 6.0&#xff08;API级别23&#xff09;开始&#xff0c;应用在运行时需要动态申请权限。以下是一些步骤来动态申请权限&#xff1a; 在应用的清单文件&#xff08;AndroidManifest.xml&#xff09;中声明需要的权限。例如&#xff0c;如果应…

Elasticsearch:生成 AI 中的微调与 RAG

在自然语言处理 (NLP) 领域&#xff0c;出现了两种卓越的技术&#xff0c;每种技术都有其独特的功能&#xff1a;微调大型语言模型 (LLM) 和 RAG&#xff08;检索增强生成&#xff09;。 这些方法极大地影响了我们利用语言模型的方式&#xff0c;使它们更加通用和有效。 在本文…

【制作系统盘】老毛桃装机,软碟通装机,硬盘装机---超详细讲解

目录 一 老毛桃装机 1.1 老毛桃是什么 1.2 下载安装 1.3 制作启动U盘 1.4 下载镜像文件 1.5 重装系统(PE安装) 1.6 开始重装系统 二 软碟通装机 2.1 软碟机概念 2.2 安装 2.3 ultraiso制作启动u盘 2.4 安装Win10系统 三 硬件装机 3.1 OneKeyGhost是什么 3.2 下…

DC-磁盘配额

2023年全国网络系统管理赛项真题 模块B-Windows解析 题目 在DC2驱动器C:\上设置磁盘配额&#xff0c;限制磁盘空间为5G&#xff0c;警告等级为3G&#xff0c;超出配额限制时记录事件&#xff0c;超出警告等级时记录事件。 配置步骤 验证 查看DC2驱动器C:\的磁盘配额&#xf…