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

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

leetcode题目地址:202. 快乐数

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

题目简介

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

「快乐数」 定义为:

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

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

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

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

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

public boolean isHappy(int n) {
    ArrayList<Integer> temp = new ArrayList<Integer>();
    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<Integer> s = new HashSet<Integer>();
    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 中每一个元素并执行特定操作
  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值