栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

leetcode每日打卡

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

leetcode每日打卡

202.快乐数
难度 : 简单
------>202.快乐数<-------

题目要求:

编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。 如果 n 是 快乐数 就返回 true ;不是,则返回 false 。

实例1 :

输入:n = 19
输出: true

实例2 :

输入:n = 2
输出:false

提示 :

  • 1 <= n <= 231 - 1

思路1 : 哈希表
  • 使用HashSet保存出现过的数字
  • 当数字重复出现时,Hashset插入元素返回false
  • 循环中出现数字等于1,返回true
public boolean isHappy(int n) {
        HashSet set = new HashSet<>();
        while (true){
        	//如果添加失败,返回false
            if(!set.add(n)){
                return false;
            }
            //等于一时跳出循环返回true
            if(n == 1) break;
            int nextNum = 0;
            while (n > 0){
                int num = n % 10;
                n = n / 10;
                nextNum += num * num;
            }
            n = nextNum;
        }
        return true;
    }
思路2 : 快慢指针
  • 如果不存在为1的情况
  • 那么必然会形成一个环
  • 所以,可以使用快慢指针判断是否有环
  • 当快指针和慢指针的值相等时
  • 说明会出现环,也就不会出现结果为1的情况,返回false
	//快慢指针法
    public boolean isHappy(int n) {
        int slow = n;
        int fast = nextNum(n);
        while (slow != 1 && fast != 1){
            if(slow == fast){
                return false;
            }
            slow = nextNum(slow);
            fast = nextNum(nextNum(fast));
        }
        return true;
    }
	//计算下一个数字
    private int nextNum(int n){
        int nextNum = 0;
        while (n > 0){
            int num = n % 10;
            n = n / 10;
            nextNum += num * num;
        }
        return nextNum;
    }

263.丑数
难度 : 简单
------>263.丑数<-------

题目要求:

丑数 就是只包含质因数 2、3 和 5 的正整数。
给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。

实例1 :

输入:n = 6
输出:true
解释:6 = 2 × 3

实例2 :

输入:n = 1
输出:true
解释:1 没有质因数,因此它的全部质因数是 {2, 3, 5} 的空集。
习惯上将其视作第一个丑数。

提示 :

  • -231 <= n <= 231 - 1

思路1 : 暴力计算

要想判断一个数是否具有除了[2,3,5]以外的质因数,只需要把这个数对[2,3,5]分别相除,知道不能除尽为止,判断剩下的数字是否为1,如果不为1,说明不是丑数.

	public boolean isUgly(int n) {
        if (n <= 0) return false;
        int[] arr = {2, 3, 5};
        for (int num : arr) {
            while (n % num == 0) {
                n = n / num;
            }
        }
        return n == 1;
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027160.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号