【LeetCode】202. 快乐数(ArrayList<>)

  今日学习的文章链接和视频链接

leetcode题目地址:202. 快乐数

 代码随想录题解地址:代码随想录

题目简介

编写一个算法来判断一个数 n 是不是快乐数。

「快乐数」 定义为:

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

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

看到题目的第一想法(可以贴代码)

1. 感觉本题联想不到哈希表的解法,取每次的n,对其%10,用ArrayList存储结果(可变长度数组),再进行快乐数的判定。

至于某数可能不是快乐数,为了避免无限循环,设置循环次数为 7 次(自定义)。

public boolean isHappy(int n) {
    ArrayList temp = new ArrayList();
    int times = 0;
    while (times < 7){
        while(n >= 1){
            temp.add(n%10);
            n = n/10;
        }
        int sum = 0;
        for (int i : temp){
            sum += Math.pow(i,2);
        }
        if (sum == 1) return true;
        n = sum;
        temp.clear();
        times++;
    }
    return false;
}

实现过程中遇到哪些困难

看完代码随想录之后的想法

【解题思路】至于某数可能不是快乐数,为了避免无限循环,使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。

【想法】

1. 不必用ArrayList存每位数,再求平方和,每次取一个数直接平方然后+=sum里就行,同时求平方也可以直接 num*num。

看完视频自己写的ACC:

public boolean isHappy(int n) {
    Set s = new HashSet();
    while (n != 1 && !s.contains(n)){
        s.add(n);
        n = getNextN(n);
    }
    return n == 1;
}
private int getNextN(int n) {
    int sum = 0;
    while (n >= 1){
        sum += (n % 10)*(n % 10);
        n = n / 10;
    }
    return sum;
}

学习时长

9:00 ~ 9:26  解题成功

9:26 ~ 9:38  看视频题解、写博客


今日收获

1. 10 % 3 = 1 (remiander 求余运算)        19 / 10 = 1 (向下取整)

2. ArrayList 输出:System.out.println(arrlist.toString());

3. java 求次方:c=Math.pow(a, b)

4. ArrayList用法:arrlist.clear()删除所有元素

add() 将元素插入到指定位置的 arraylist 中
addAll() 添加集合中的所有元素到 arraylist 中
clear() 删除 arraylist 中的所有元素
clone() 复制一份 arraylist
contains() 判断元素是否在 arraylist
get() 通过索引值获取 arraylist 中的元素
indexOf() 返回 arraylist 中元素的索引值
removeAll() 删除存在于指定集合中的 arraylist 里的所有元素
remove() 删除 arraylist 里的单个元素
size() 返回 arraylist 里元素数量
isEmpty() 判断 arraylist 是否为空
subList() 截取部分 arraylist 的元素
set() 替换 arraylist 中指定索引的元素
sort() 对 arraylist 元素进行排序
toArray() 将 arraylist 转换为数组
toString() 将 arraylist 转换为字符串
ensureCapacity() 设置指定容量大小的 arraylist
lastIndexOf() 返回指定元素在 arraylist 中最后一次出现的位置
retainAll() 保留 arraylist 中在指定集合中也存在的那些元素
containsAll() 查看 arraylist 是否包含指定集合中的所有元素
trimToSize() 将 arraylist 中的容量调整为数组中的元素个数
removeRange() 删除 arraylist 中指定索引之间存在的元素
replaceAll() 将给定的操作内容替换掉数组中每一个元素
removeIf() 删除所有满足特定条件的 arraylist 元素
forEach() 遍历 arraylist 中每一个元素并执行特定操作

你可能感兴趣的:(leetcode,算法,职场和发展)