LeetCode题练习与总结:丑数--263

news2024/10/8 17:46:46

一、题目描述

丑数 就是只包含质因数 23 和 5 的正整数。

给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。

示例 1:

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

示例 2:

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

示例 3:

输入:n = 14
输出:false
解释:14 不是丑数,因为它包含了另外一个质因数 7 。

提示:

  • -2^31 <= n <= 2^31 - 1

二、解题思路

  1. 首先判断 n 是否为正整数,如果不是,则直接返回 false。
  2. 不断将 n 除以 2、3、5,直到 n 不能被这三个数整除为止。
  3. 如果最后 n 等于 1,则说明 n 只包含质因数 2、3、5,返回 true;否则,返回 false。

三、具体代码

class Solution {
    public boolean isUgly(int n) {
        // 判断 n 是否为正整数
        if (n <= 0) {
            return false;
        }

        // 不断将 n 除以 2、3、5,直到 n 不能被这三个数整除为止
        for (int factor : new int[]{2, 3, 5}) {
            while (n % factor == 0) {
                n /= factor;
            }
        }

        // 如果最后 n 等于 1,则返回 true;否则,返回 false
        return n == 1;
    }
}

以上代码中,我们首先判断 n 是否为正整数,然后使用一个 for 循环和一个 while 循环来不断将 n 除以 2、3、5。如果最后 n 等于 1,则说明 n 只包含质因数 2、3、5,返回 true;否则,返回 false。

四、时间复杂度和空间复杂度

1. 时间复杂度

代码中的主要操作是循环除以 2、3、5,直到 n 不能被这三个数整除为止。假设 n 的质因数分解为 n = 2^a x 3^b x 5^c x d,其中 d 是除了 2、3、5 以外的质因数(如果有的话)。

  1. 第一个循环,当 n 能被 2 整除时,n 会除以 2,直到 n 不能被 2 整除。这需要最多 a 次操作。
  2. 第二个循环,当 n 能被 3 整除时,n 会除以 3,直到 n 不能被 3 整除。这需要最多 b 次操作。
  3. 第三个循环,当 n 能被 5 整除时,n 会除以 5,直到 n 不能被 5 整除。这需要最多 c 次操作。

因此,总的操作次数是 a + b + c,即 n 中 2、3、5 的质因数个数之和。在最坏的情况下,n 是 2、3、5 的幂,那么 a、b、c 可以达到 log_2(n)、log_3(n)、log_5(n)的数量级。因此,时间复杂度可以表示为 O(log_2(n) + log_3(n) + log_5(n))。由于对数函数的增长速度远低于线性函数,我们可以简化时间复杂度为 O(log n)。

2. 空间复杂度

代码中使用的额外空间主要是常数空间,即用于存储质因数 2、3、5 的数组。这个数组的大小是固定的,不随输入 n 的大小而变化。因此,空间复杂度为 O(1)。

五、总结知识点

  • 类定义

    • class Solution:定义了一个名为 Solution 的类。
  • 方法定义

    • public boolean isUgly(int n):定义了一个名为 isUgly 的公共方法,它接受一个整数参数 n 并返回一个布尔值。
  • 条件判断

    • if (n <= 0):使用了 if 语句来检查 n 是否小于或等于 0,用于判断 n 是否为正整数。
  • 循环结构

    • for (int factor : new int[]{2, 3, 5}):使用了增强型 for 循环(也称为“for-each”循环)来遍历一个整数数组,该数组包含质因数 2、3、5。
  • 数学运算

    • %:取模运算符,用于判断一个数是否能被另一个数整除。
    • /=:除法赋值运算符,用于将一个数除以另一个数,并将结果赋值给原数。
  • 逻辑运算

    • while (n % factor == 0)while 循环用于在 n 能被 factor 整除的情况下重复执行循环体内的代码。
  • 返回值

    • return false; 和 return n == 1;:根据条件返回布尔值 true 或 false
  • 数组初始化

    • new int[]{2, 3, 5}:使用数组初始化语法创建并初始化一个整数数组。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2196872.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

注意!新增一本期刊解除On Hold!仍有37本无法检索慎投!

On Hold期刊 2024年9月29日&#xff0c;小编从WOS数据库查到新增一本ESCI期刊《SOCAR Proceedings》解除On Hold标识 目前共37本期刊被标记&#xff0c;期刊整理如下&#xff0c;请注意避雷&#xff01; 01 解除风险期刊 SOCAR Proceedings • ISSN&#xff1a;2218-6867 •…

RAR解压缩软件的全面指南:压缩、加密、修复功能一应俱全

在日常文件管理中&#xff0c;压缩文件格式与解压缩工具是不可或缺的组成部分。而RAR格式&#xff0c;凭借其高效的压缩率、丰富的功能和灵活的文件管理方式&#xff0c;成为了用户最常使用的压缩格式之一。 作为处理RAR格式的专业工具&#xff0c;RAR解压缩软件具备压缩、加密…

马哥亲讲k8s集群搭建

文章目录 Docker和K8s安装1.docker安装2.安装cri-dockerd3.安装kubelet、kubeadm、kubectl4.整合kubelet和cri-dockerd 集群节点部署1.配置国内镜像站2.方式一&#xff1a;命令初始化1.kubeadm init2.保存初始化token3.拷贝/etc/kubernetes/admin.conf4.部署网络插件5.kubectl …

reactNative本地调试localhost踩坑

本地调试请求localhost的时候 1.要和电脑处在同一局域网下面&#xff08;同一个wifi&#xff09; 2.把baseURL的localhost改成命令行中ipconfig查询到的IPv4 地址 . . . . . . . . . . . . : &#xff08;例如&#xff09;192.168.1.103 如果报错Net Work Error&#xff0c;可…

算法知识点————贪心

贪心&#xff1a;只考虑局部最优解&#xff0c;不考虑全部最优解。有时候得不到最优解。 DP&#xff1a;考虑全局最优解。DP的特点&#xff1a;无后效性&#xff08;正在求解的时候不关心前面的解是怎么求的&#xff09;&#xff1b; 二者都是在求最优解的&#xff0c;都有最优…

如何扫描HTTP代理:步骤与注意事项

HTTP代理是一个复杂的过程&#xff0c;通常用于寻找可用的代理服务器&#xff0c;以便在网络中实现匿名或加速访问。虽然这个过程可以帮助用户找到适合的代理&#xff0c;但也需要注意合法性和道德问题。本文将介绍如何扫描HTTP代理&#xff0c;并提供一些建议和注意事项。 什…

剖析十大经典二叉树题目:C 语言代码实现与深度解读

&#x1f4af;前言 二叉树是数据结构中的重要概念&#xff0c;在算法和编程中有着广泛的应用。以下是十大经典的二叉树题目及其解析与 C 语言代码实现&#xff0c;同时也会说明题目来源。 二叉树的基本概念&#x1f449;【剖析二叉树】 目录 &#x1f4af;二叉树的遍历 ⭐前…

AI大模型真的是大龄程序员的新的出路吗?_大龄程序员ai创业

前言 在IT行业的高速运转中&#xff0c;许多资深程序员到了一定年龄后&#xff0c;会发现自己陷入了职业发展的瓶颈。尤其是在北京这样的大厂&#xff0c;业务波动、部门调整以及裁员风险&#xff0c;都让“40”的程序员们感受到了前所未有的压力。当昔日的技术热情逐渐消退&a…

在C#中使用适配器Adapter模式和扩展方法解决面向对象设计问题

之前有阵子在业余时间拓展自己的一个游戏框架&#xff0c;结果在实现的过程中发现一个设计问题。这个游戏框架基于MonoGame实现&#xff0c;在MonoGame中&#xff0c;所有的材质渲染&#xff08;Texture Rendering&#xff09;都是通过SpriteBatch类来完成的。举个例子&#xf…

新书速览|你好,C++

《你好&#xff0c;C》 本书内容 《你好&#xff0c;C》主要介绍C开发环境的搭建、基础语法知识、面向对象编程思想以及标准模板库的应用&#xff0c;特别针对初学者在学习C过程中可能遇到的难点提供了解决方案。全书共分13章&#xff0c;以一个工资程序的不断优化和完善为线索…

ChatGPT助力文献综述写作:提升效率与写作技巧!

文献综述在论文写作中占有举足轻重的地位。它不仅帮助我们梳理已有的研究成果&#xff0c;还能为自己的研究奠定基础。许多同学在撰写文献综述时常常感到头疼&#xff1a;如何处理海量的信息&#xff1f;如何将不同的观点有条理地整合起来&#xff1f;再加上学术语言的高要求&a…

定时任务。

引入 1.启动类上加上注解 2.新建一个定时任务的管理类&#xff0c;交给Spring管理 案例 案例1&#xff1a;fixedRate //上次任务开始到下次任务开始的时间间隔为5秒 //每隔5秒执行一次,不需要等上个任务执行完 Scheduled(fixedRate 5000) public void mask01() throws Inte…

python:web自动化工具selenium安装和配置(1)

UI自动化测试 UI自动化测试&#xff08;User Interface Automation Testing&#xff09;是一种通过编写脚本或使用自动化测试工具&#xff0c;对界面&#xff08;UI&#xff09;进行自动化测试的方法。原理主要是模拟用户打开客户端或网页的UI界面&#xff0c;自动化执行用户界…

【Java 问题】基础——泛型

接上文 泛型 47.Java 泛型了解么&#xff1f;什么是类型擦除&#xff1f;介绍一下常用的通配符&#xff1f; 47.Java 泛型了解么&#xff1f;什么是类型擦除&#xff1f;介绍一下常用的通配符&#xff1f; 什么是泛型&#xff1f; Java 泛型&#xff08;generics&#xff09;是…

REINFORCEMENT LEARNING THROUGH ACTIVE INFERENCE

摘要 强化学习&#xff08;RL&#xff09;的核心原则是智能体寻求最大化累积奖励之和。相比之下&#xff0c;主动推理&#xff0c;认知和计算神经科学中的一个新兴框架&#xff0c;提出代理人采取行动&#xff0c;以最大限度地提高有偏见的生成模型的证据。在这里&#xff0c;…

上门安装维修系统小程序开发详解及源码示例

随着智能家居和设备的普及&#xff0c;消费者对上门安装和维修服务的需求日益增加。为了满足这一市场需求&#xff0c;开发一款上门安装维修系统小程序成为了一种有效的解决方案。本文将详细介绍上门安装维修系统小程序的开发过程&#xff0c;并提供一个简单的源码示例&#xf…

人工智能的未来

引言 人工智能的未来发展将是科技与人类社会深度融合的过程。随着技术的不断进步&#xff0c;AI将在全球经济、文化、政治及道德伦理等领域产生深远影响。本文将探讨人工智能在未来可能的技术进步、应用领域、社会影响、伦理挑战&#xff0c;以及对全球未来的展望。 一、技术前…

数据结构之——二叉树

一、二叉树的基本概念 二叉树是数据结构中的重要概念&#xff0c;每个节点最多有两个子树&#xff0c;分别为左子树和右子树。这种结构具有明确的层次性和特定的性质。 二叉树有五种基本形态&#xff1a; 空二叉树&#xff1a;没有任何节点。只有一个根结点的二叉树&#xff…

【HTTPS】深入解析 https

我的主页&#xff1a;2的n次方_ 1. 背景介绍 在使用 http 协议的时候是不安全的&#xff0c;可能会出现运营商劫持等安全问题&#xff0c;运营商通过劫持 http 流量&#xff0c;篡改返回的网页内容&#xff0c;例如广告业务&#xff0c;可能会通过 Referer 字段 来统计是…

kubernetes get pods的STATUS字段显示ImagePullBackOff 的解决办法

问题&#xff1a; [rootmaster ingress]# kubectl -n ingress-nginx get pods NAME READY STATUS RESTARTS AGE ingress-nginx-admission-create-mcrc6 0/1 ImagePullBackOff 0 37m ingress-…