专栏:50多种数据结构彻底征服
专栏:50多种经典图论算法全部掌握
最近DeepSeek真的是火爆,网络上铺天盖地的全是关于DeepSeek的介绍,我顺便也看了下同类工作的招聘条件,学历要求到不高,大部分本科就可以,但薪资开的真的很高,动辄年薪百万,这也是未来一个很好的就业机会。如果想从事这一行业,首先把C++和Python学好,然后熟练掌握一种主流深度学习框架,比如PyTorch或Tensorflow,后面就可以直接实习或者找工作了,机会要把握住。
--------------下面是今天的算法题--------------
来看下今天的算法题,这题是LeetCode的第202题:快乐数。
问题描述
来源:LeetCode第202题
难度:中等
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
·对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
·然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。
·如果这个过程结果为 1,那么这个数就是快乐数。
如果 n 是快乐数就返回 true ;不是,则返回 false 。
示例1:
输入:n = 19 输出:true 解释: 1^2 + 9^2 = 82 8^2 + 2^2 = 68 6^2 + 8^2 = 100 1^2 + 0^2 + 0^2 = 1
示例2:
输入:n = 2 输出:false
1 <= n <= 2^31 - 1
问题分析
这题是让判断给定的数是否是快乐数,快乐数的定义是把当前数字每个位置上数字的平方相加来替换当前数字,一直重复下去,直到当前数字变成 1 ,那么这个数字就是快乐数。
还有可能永远都不会变成 1 ,这种情况就不可能是快乐数, 如果不是快乐数在计算的时候一定会出现循环 ,比如4->16->37->58->89->145->42->20->4,4 在计算的时候出现了循环,所以 4 就不是快乐数。
我们可以使用一个集合set来记录有没有出现重复的数字,如果计算的时候出现重复的数字,说明出现了循环,那么当前数字就不是快乐数。
JAVA:
public boolean isHappy(int n) {
Set
set = new HashSet<>(); while (n != 1 && set.add(n)) n = next(n); return n == 1; } private int next(int n) { int sum = 0; while (n > 0) { int d = n % 10; // 求余数 sum += d * d; n /= 10; } return sum; }C++:
public:
bool isHappy(int n) {
unordered_set
mySet; while (n != 1 && !mySet.count(n)) { mySet.emplace(n); n = next(n); } return n == 1; } int next(int n) { int sum = 0; while (n > 0) { int d = n % 10;// 求余数 sum += d * d; n /= 10; } return sum; }
Python:
def isHappy(self, n: int) -> bool:
def next(n: int):
sum = 0
while n > 0:
n, d = divmod(n, 10)
sum += d ** 2
return sum
mySet = set()
while n != 1 and n not in mySet:
mySet.add(n)
n = next(n)
return n == 1笔者简介
博哥,真名:王一博,毕业十多年, 作者,专注于 数据结构和算法 的讲解,在全球30多个算法网站中累计做题2000多道,在公众号中写算法题解800多题,对算法题有自己独特的解题思路和解题技巧,喜欢的可以给个关注,也可以 下载我整理的1000多页的PDF算法文档 。
热门跟贴