• 【随想】每日两题Day.9


    题目:202.快乐数

    编写一个算法来判断一个数 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 <= 231 - 1

    代码:

    1. class Solution {
    2. public boolean isHappy(int n) {
    3. Set set = new HashSet<>();
    4. set.add(n);
    5. int sum = n;
    6. while(sum != 1) {
    7. sum = method(sum);
    8. if(set.contains(sum)) {
    9. return false;
    10. }
    11. set.add(sum);
    12. }
    13. return true;
    14. }
    15. public int method(int n) {
    16. int sum = 0;
    17. while(n != 0) {
    18. sum += (n%10)*(n%10);
    19. n /= 10;
    20. }
    21. return sum;
    22. }
    23. }

    思考:

    题目很细节,一开始都会思考怎么才能结束这个循环呢?但是题目说了!不是快乐数会无限循环,循环起来了,那么我们就只需要判断得到的数字 之前是否得到过。去重我们用Set数据结构。了解到这步就很简单啦!

    题目:1.两数之和

    给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

    你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

    你可以按任意顺序返回答案。

    示例 1:

    输入:nums = [2,7,11,15], target = 9
    输出:[0,1]
    解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
    

    示例 2:

    输入:nums = [3,2,4], target = 6
    输出:[1,2]
    

    示例 3:

    输入:nums = [3,3], target = 6
    输出:[0,1]
    

    提示:

    • 2 <= nums.length <= 104
    • -109 <= nums[i] <= 109
    • -109 <= target <= 109
    • 只会存在一个有效答案

    代码:

    1. class Solution {
    2. public int[] twoSum(int[] nums, int target) {
    3. int[] res = new int[2];
    4. if(nums == null || nums.length == 0) return null;
    5. HashMap map = new HashMap<>();
    6. for(int i = 0;i
    7. int tmp = target - nums[i];
    8. if(map.containsKey(tmp)) {
    9. res[0] = i;
    10. res[1] = map.get(tmp);
    11. return res;
    12. }
    13. map.put(nums[i],i);
    14. }
    15. return null;
    16. }
    17. }

    思考:

    由于本题最重要的就是查找一个元素是否出现过,且要有下标和值两个元素,我们考虑用map。

    本题学到的知识有,数组的判空:不光是nums == null,还要判断nums.length == 0 

    HashMap的操作:map.put()     map.containsKey()    map.get()

  • 相关阅读:
    PTA_乙级_1013
    GBMLlib(GBase支撑数据挖掘和机器学习)简介
    OceanBase TableAPI实践案例(Rust)
    吃鸡游戏出现msvcp140.dll缺失的四个解决方法
    MogaFX外汇储备以一年多来的最快速度增长
    Kotlin 协程 知识点
    vue 大文件断点续传、并发控制、请求重试
    【Java 进阶篇】JDBC ResultSet 类详解
    【面试算法——动态规划 21】不同的子序列(hard)&& 通配符匹配(hard)
    在同事的代码中学习-责任链模式
  • 原文地址:https://blog.csdn.net/weixin_63895720/article/details/133172466