哈希表(Hash table): 又名离散表,根据关键码的值而直接进行访问的数据结构。可以用来快速判断一个元素是否出现集合中。
一.快乐数
LeetCode题目链接:202. 快乐数
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
哈希集合检测重合法:
- 思路:该算法分为两步,第一步实现算法求出正整数的每个位置上数字的平方和:可以除以10 余数为位置上的数字,商为下次循环的入参,直到商大于0;第二步判断每次得到的值是否是1,如果等于1则为快乐数,另外不为快乐数是也需要个停止契机,当循环到之前出现过的值时则说明不为快乐数了,可以使用set特性实现。
- 代码实现
public boolean isHappy(int n) {
Set<Integer> set = new HashSet<>();
set.add(n);
for (; ; ) {
n = sumOfSquare(n);
if (n == 1) {
return true;
} else {
if (!set.add(n)) {
return false;
}
}
}
}
// 获取各位平方和
int sumOfSquare(int n) {
int sum = 0;
while (n > 0) {
int a = n % 10;
sum += a * a;
n = n / 10;
}
return sum;
}
-
复杂度分析
时间复杂度:O(logn)
空间复杂度:O(logn)