首页 > 编程语言 >算法:丑数

算法:丑数

时间:2023-06-12 15:38:51浏览次数:45  
标签:丑数 示例 复杂度 除以 while 算法 num

题目描述

编写一个程序判断给定的数是否为丑数。

丑数就是只包含质因数 2, 3, 5 的正整数。

示例 1:
输入: 6

输出: true

解释: 6 = 2 × 3


示例 2:

输入: 8

输出: true

解释: 8 = 2 × 2 × 2


示例 3:

输入: 14

输出: false

解释: 14 不是丑数,因为它包含了另外一个质因数 7。

详细描述:263. 丑数

思路

根据丑数的定义,0 和负整数一定不是丑数。我们将给定数字除以 2、3、5(顺序无所谓),直到无法整除。 如果得到 1,说明是所有因子都是 2 或 3 或 5,如果不是 1,则不是丑陋数。

这就好像我们判断一个数字是否为 n(n 为大于 1 的正整数)的幂次方一样,我们只需要 不断除以 n,直到无法整除,如果得到 1,那么就是 n 的幂次方。 这道题的不同在于 它不再是某一个数字的幂次方,而是三个数字(2,3,5),不过解题思路还是一样的。

转化为代码可以是:

while (num % 2 === 0) num = num / 2;

while (num % 3 === 0) num = num / 3;

while (num % 5 === 0) num = num / 5;

return num === 1;

实现

var isUgly = function (num) {

    if (num <= 0) return false;
    if (num === 1) return true;

    const list = [2, 3, 5];

    if (list.includes(num)) return true;

    for (let i of list) {
        if (num % i === 0) return isUgly(Math.floor(num / i));
    }

    return false;

};

时间复杂度:$O(log n)$。时间复杂度取决于对 $n$ 除以 $2$,$3$,$5$ 的次数,由于每次至少将 $n$ 除以 $2$,因此除法运算的次数不会超过 $O(log n)$。

空间复杂度:O(1)O(1)。

总结

这是一道高频考题,答题时,需要注意边界情况的考虑,抓住问题的本质。

标签:丑数,示例,复杂度,除以,while,算法,num
From: https://blog.51cto.com/codeniu/6462879

相关文章

  • 【技术积累】算法中的回溯算法【一】
    回溯算法是什么回溯算法是一种用于求解在某个搜索空间中的问题的算法。它基本思想是从问题的某一种状态开始不断地尝试各种可能的选择,直到找到一种满足问题要求的解或者发现这些选择都无法满足要求时,就回到上一个状态,尝试其他的选择。回溯算法通常采用递归的方法实现,它会不断地......
  • 算法题:求解斐波那契数列
    概念:斐波那契数列是指以0,1开始,之后每一项都等于前两项之和的数列,即:0,1,1,2,3,5,8,13,21,34,55,89,144……以此类推。这个数列最早是由13世纪意大利数学家斐波那契提出的,并在数学、自然科学和计算机科学等领域有着广泛的应用。题目:若有一只兔子,它每个月生一只小兔子,而小兔子......
  • 算法练习-day5
    哈希表242.有效的字母异位词题意:给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。示例:    思路:我们可以先创建一个unordered_map用于记录s中元素出现的次数,然后再遍历t,让t出现元素次数减去s出现......
  • 算法分析期末复习
    算法分析期末复习第一章算法概述基本理论知识课后作业做过的类型渐进阶排序,类似课后作业:1-3输入规模,类似课后作业:1-4,1-5第二章递归与分治基本概念,基本思想递归:直接或间接的调用自身的算法。分治:分治法的子问题间是相互独立的,子问题不包含公共的子问题。......
  • 深度学习降噪专题课:实现WSPK实时蒙特卡洛降噪算法
    大家好~本课程基于全连接和卷积神经网络,学习LBF等深度学习降噪算法,实现实时路径追踪渲染的降噪本课程偏向于应用实现,主要介绍深度学习降噪算法的实现思路,演示实现的效果,给出实现的相关代码线上课程资料:本节课录像回放加QQ群,获得相关资料,与群主交流讨论:106047770本系列文章为......
  • RC4加密算法及Python实现
    一、RC4加密算法原理RC4算法是一种流加密算法,由RonRivest在1987年设计。它的主要特点是简单快速,而且在加密解密过程中使用的密钥长度可变。因此,RC4算法被广泛应用于网络安全领域,如SSL、TLS、WEP、WPA等协议中。RC4算法的加密过程如下:初始化S盒和T数组。S盒是一个256字节的数组,用于......
  • 4.4 分类算法-逻辑回归与二分类以及分类的评估方法
    1逻辑回归的简介1.1简介逻辑回归(LogisticRegression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归,但是它与回归之间有一定的联系。由于算法的简单和高效,在实际中应用非常广泛。1.2应用场景广告点击率(是否会被点击)是否为垃圾邮件是否患病金融诈......
  • 算法题:球反弹高度问题
    一个球从100米高度自由落下,每次落地反弹回原高度一半。求它在第10次落地时候,共经过多少米? 第十次反弹高度是多少?//设经过路程为sum每次反弹高度为F$f=100;$sum=100;for($i=1;$i<=10;$i++){$f=$f/2;$sum=$sum+$f;}echo"共经过".$sum."米,第10次反......
  • 【LeetCode.384打乱数组】Knuth洗牌算法详解
    前两天看网易面筋得知网易云的随机歌曲播放使用了这个算法,遂找题来做做学习一下打乱数组https://leetcode.cn/problems/shuffle-an-array/给你一个整数数组nums,设计算法来打乱一个没有重复元素的数组。打乱后,数组的所有排列应该是等可能的。实现Solutionclass:Solution......
  • 算法题:百钱买鸡问题
    公鸡5文钱一只母鸡3文钱一只小鸡一文钱3只 问100文钱,要买100只鸡,每种鸡不少于一只 那么100只鸡中,公鸡母鸡小鸡各有多少只//设公鸡数g母鸡数m小鸡数x//那么g*5+m*3+x/3=100文for($g=1;$g<=100;$g++){for($m=1;$m<=100;$m++){for($x=1;$x<=1......