力扣刷题:快乐数(java实现)(代码片段)

谦谦均 谦谦均     2022-12-08     767

关键词:

题目描述:编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」定义为:

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

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

示例 1:

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

示例 2:

输入:n = 2
输出:false

提示:

  • 1 <= n <= 2^31 - 1

相关标签:哈希表数学双指针

解析:要确定一个数是不是快乐数,需要进行的循环次数是不可知的,但是只要最后结果是1,就是快乐数,那么这就是一个循环结束的条件。

public boolean isHappy(int n) 
        //如果n是1,直接返回
        if(n==1)
            return true;
        
        //每次变化的最终结果
        int res = n;
        //变化过程的中间变量
        int tem = 0;
        //接收所有的最终结果,如果有重复的。说明进入死循环
        ArrayList<Integer> list = new ArrayList<>();
        //添加初始值n
        list.add(n);
        //死循环求出所有可能
        while (true)
            //这个循环用来求出res的每个位置上的平方和
            while (res!=0)
                tem = tem + (res % 10) * (res % 10);
                res = res / 10;
            
            //如果重复了,直接返回false
            if(list.contains(tem))
                return false;
            
            //不重复则添加
            list.add(tem);
            //转换变量
            res = tem;
            tem = 0;
            //如果是1,就是快乐数
            if(res == 1)
                return true;
            
            //如果循环到了最大整数阈值,返回false
            if(res == Integer.MAX_VALUE)
                return false;
            
        
    

快乐数,今天你快乐了吗?

做一道光吧,亮的时候就福泽四方,暗的时候就惠及身旁!

力扣刷题:快乐数(java实现)(代码片段)

题目描述:编写一个算法来判断一个数n是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为1,也可能是无限循环但始终变... 查看详情

力扣刷题:三数之和(java实现)(代码片段)

题目:给你一个包含n个整数的数组nums,判断nums中是否存在三个元素a,b,c,使得a+b+c=0?请你找出所有和为0且不重复的三元组。标签:数组,双指针,排序注意:答案中不可以包... 查看详情

力扣刷题:括号生成(java实现)(代码片段)

数字n代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。有效括号组合需满足:左括号必须以正确的顺序闭合。示例1:输入:n=3输出:["((()))","(()())",&... 查看详情

力扣刷题:合并区间(java实现)(代码片段)

题目描述:以数组intervals表示若干个区间的集合,其中单个区间为intervals[i]=[starti,endi]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。示例1:输入:in... 查看详情

力扣刷题:寻找峰值(java实现)(代码片段)

题目:峰值元素是指其值严格大于左右相邻值的元素。给你一个整数数组nums,找到峰值元素并返回其索引。数组可能包含多个峰值,在这种情况下,返回任何一个峰值所在位置即可。你可以假设nums[-1]=nums[n]=... 查看详情

力扣刷题:岛屿数量(java实现)(代码片段)

给你一个由'1'(陆地)和'0'(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以... 查看详情

力扣刷题:全排列(java实现)(代码片段)

题目:给定一个不含重复数字的数组nums,返回其所有可能的全排列。你可以按任意顺序返回答案。示例1:输入:nums=[1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例2:输入:nums=[0,1]输出&#x... 查看详情

力扣刷题:字母异位词分组(java实现)(代码片段)

题目:给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。字母异位词是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母都恰好只用一次。示例1:输入:strs=["eat... 查看详情

力扣刷题:单词搜索(java实现)(代码片段)

题目:给定一个mxn二维字符网格board和一个字符串单词word。如果word存在于网格中,返回true;否则,返回false。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相... 查看详情

力扣刷题:最长回文子串(java实现)(代码片段)

题目:给你一个字符串s,找到s中最长的回文子串。示例1:输入:s="babad"输出:"bab"解释:"aba"同样是符合题意的答案。【个人建议最好取第一个】示例2:输入:s="cbbd"... 查看详情

力扣刷题:前k个高频元素(java实现)(代码片段)

题目:给你一个整数数组nums和一个整数k,请你返回其中出现频率前k高的元素。你可以按任意顺序返回答案。示例1:输入:nums=[1,1,1,2,2,3],k=2输出:[1,2]示例2:输入:nums=[1],k=1输出:[1]提示:1<=nums.length<=... 查看详情

力扣刷题:电话号码的字母组合(java实现)(代码片段)

题目:给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意1不对应任何字母。示例1:输入:digits="23"... 查看详情

力扣刷题—两数之和(代码片段)

题目:给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重... 查看详情

力扣刷题:矩阵置零(java实现)(代码片段)

题目:给定一个mxn的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0。请使用原地算法。进阶:一个直观的解决方案是使用O(mn)的额外空间,但这并不是一个好的解决方案。一个简单的改进方案... 查看详情

力扣刷题:无重复字符的最长子串(java实现)(代码片段)

题目:给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。示例1:输入:s="abcabcbb"输出:3解释:因为无重复字符的最长子串是“abc”,所以其长度为3。示例2:输入:s="bbbbb"输出:1解释:因为... 查看详情

力扣刷题(代码片段)

两数之和给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定nums=[2... 查看详情

力扣刷题:四数之和(c#)(代码片段)

给你一个由n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且不重复的四元组[nums[a],nums[b],nums[c],nums[d]](若两个四元组元素一一对应,则认为两个四元组重复):0<=a,b,c,d<... 查看详情

力扣刷题:四数之和(c#)(代码片段)

给你一个由n个整数组成的数组nums,和一个目标值target。请你找出并返回满足下述全部条件且不重复的四元组[nums[a],nums[b],nums[c],nums[d]](若两个四元组元素一一对应,则认为两个四元组重复):0<=a,b,c,d<... 查看详情