热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LeetCode263丑数(数学智力题)

看了答案才发现,这个题目这么简单。这个题目隐含的意思很坑,除了2、3、5,不能有别的质数了,比如2x714,7

看了答案才发现,这个题目这么简单。

 

这个题目隐含的意思很坑,

除了2、3、5,不能有别的质数了,比如2x7 = 14,7是质数,不行。

 

2x25可以 因为25不是质数

 

所以我就想到

一个数,看能否被2整除,如果可以

1、这个商是质数吗? 如果是质数,那么是2、3、5吗?是就是true,不是就是false

2、如果不是质数,就判断这个商是不是丑数。递归

 

后面对3和5也是这样处理。

 

首先是判断质数的方法

就是num%i 一直到根号nums

 

https://blog.csdn.net/huang_miao_xin/article/details/51331710

在网上,多了一种方法。

如果一个数 不是6的倍数相邻的数,肯定不是质数。 不能反推

public class LeetCode263 {public static void main(String[] args) {System.out.println(isUgly(50));}public static boolean isPrime(int n){if (n&#61;&#61;1||n&#61;&#61;2||n&#61;&#61;3||n&#61;&#61;5)return true;if(!(n%6&#61;&#61;1||n%6&#61;&#61;5)){return false;}int temp &#61; (int)Math.sqrt(n);//必须是&#61;&#xff0c;不然25&#xff0c;可以55 25for(int i&#61;2;i<&#61;temp;i&#43;&#43;){if (n%i&#61;&#61;0)return false;}return true;}public static boolean isUgly(int num) {if(num<&#61;0)return false;if (num&#61;&#61;1||num&#61;&#61;2||num&#61;&#61;3||num&#61;&#61;5)return true;boolean result &#61; false;if(num%2&#61;&#61;0){//如果是质数&#xff0c;看是不是2、3、5int temp &#61; num/2;if(isPrime(temp)){if(temp&#61;&#61;2||temp&#61;&#61;3||temp&#61;&#61;5){return true;}else {return false;}}else {//如果不是质数&#xff0c;那看看这个数是不是丑数result &#61; isUgly(num/2);}}if (result){return true;}else {if(num%3&#61;&#61;0){//如果是质数&#xff0c;看是不是2、3、5int temp &#61; num/3;if(isPrime(temp)){if(temp&#61;&#61;2||temp&#61;&#61;3||temp&#61;&#61;5){return true;}else {return false;}}else {result &#61; isUgly(num/3);}}}if (result){return true;}else {if(num%5&#61;&#61;0){//如果是质数&#xff0c;看是不是2、3、5int temp &#61; num/5;if(isPrime(temp)){if(temp&#61;&#61;2||temp&#61;&#61;3||temp&#61;&#61;5){return true;}else {return false;}}else {result &#61; isUgly(num/5);}}}return result;}}

 

太慢了

 

 

 

其实忘了一个条件&#xff0c;这个商&#xff0c;肯定也是2、3、5组合得来的。

所以丑数就是

 

2a x 3b x 5c

只有这里面&#xff0c;没有别的质数就好了。但是2、3、5构成的&#xff0c;怎会是质数呢&#xff1f;

所以最后就是

public boolean isUgly(int num) {if(num<&#61;0) return false;if(num&#61;&#61;1) return true;while(num%2&#61;&#61;0)num/&#61;2;while(num%3&#61;&#61;0)num/&#61;3;while(num%5&#61;&#61;0)num/&#61;5;return (num&#61;&#61;1)?true:false; }

 

转:https://www.cnblogs.com/weizhibin1996/p/9669848.html



推荐阅读
  • Java 中 print、println 和 printf 的功能与区别详解
    在 Java 中,`print` 方法将参数内容输出到控制台,并将光标停留在最后一个字符的后面。而 `println` 方法不仅显示参数内容,还会在输出结束后自动添加一个换行符,使下一次输出从新的一行开始。此外,`printf` 方法则提供了更灵活的格式化输出选项,允许用户通过指定格式字符串来控制输出的格式和样式。这三种方法各有特点,适用于不同的输出需求。 ... [详细]
  • Java 中 ZonedDateTime 类的天数方法详解及示例代码 ... [详细]
  • 数组容量的动态调整与优化策略
    在探讨数组容量动态调整与优化策略时,本文分析了两种常见的方法。首先,通过使用for循环逐个复制元素实现扩容,但这种方法存在计算索引的复杂性问题。其次,利用System.arraycopy()方法进行高效复制,显著提升了性能和代码可读性。此外,文章还讨论了动态数组在不同应用场景下的优化策略,包括预分配容量和按需扩展等技术,以提高程序的整体效率。 ... [详细]
  • C++入门必备:首个博客知识点汇总
    本文总结了C++初学者需要掌握的关键知识点,特别强调了成员类型的区分。其中,protected成员与private成员在本类中的作用相同,但protected成员允许派生类的成员函数访问,而private成员则不允许。此外,文章还介绍了其他重要的C++基础概念,如类的构造函数、析构函数以及继承机制,为初学者提供了一个全面的学习指南。 ... [详细]
  • 本文提出了一种高效的数据结构与算法,旨在解决超大整数(超出常规 `long` 类型范围)的加法运算问题。通过引入自定义的数据结构,该方法能够有效地存储和处理任意大小的整数,并在保证计算精度的同时,显著提升运算效率。实验结果表明,该方法在处理大规模数据时表现出色,具有较高的实用价值。 ... [详细]
  • 本文深入探讨了CGLIB BeanCopier在Bean对象复制中的应用及其优化技巧。相较于Spring的BeanUtils和Apache的BeanUtils,CGLIB BeanCopier在性能上具有显著优势。通过详细分析其内部机制和使用场景,本文提供了多种优化方法,帮助开发者在实际项目中更高效地利用这一工具。此外,文章还讨论了CGLIB BeanCopier在复杂对象结构和大规模数据处理中的表现,为读者提供了实用的参考和建议。 ... [详细]
  • 开发笔记:深入解析Android自定义控件——Button的72种变形技巧
    开发笔记:深入解析Android自定义控件——Button的72种变形技巧 ... [详细]
  • 题目要求将数字字符串转换为对应的字母组合,例如“111”可以转化为“AAA”、“KA”或“AK”。本文通过深入解析暴力递归方法,详细探讨了这一问题的解法,并结合真实的 Facebook 面试题目,提供了从左至右尝试模型的具体实现和优化策略。 ... [详细]
  • 本文全面解析了 gRPC 的基础知识与高级应用,从 helloworld.proto 文件入手,详细阐述了如何定义服务接口。例如,`Greeter` 服务中的 `SayHello` 方法,该方法在客户端和服务器端的消息交互中起到了关键作用。通过实例代码,读者可以深入了解 gRPC 的工作原理及其在实际项目中的应用。 ... [详细]
  • 本文详细探讨了Zebra路由软件中的线程机制及其实际应用。通过对Zebra线程模型的深入分析,揭示了其在高效处理网络路由任务中的关键作用。文章还介绍了线程同步与通信机制,以及如何通过优化线程管理提升系统性能。此外,结合具体应用场景,展示了Zebra线程机制在复杂网络环境下的优势和灵活性。 ... [详细]
  • HDU1176:免费馅饼问题的动态规划解法分析
    题目“免费馅饼”通过动态规划方法进行了解析。该问题的时间限制为 Java 2000ms 和其他语言 1000ms,内存限制为 Java 65536K 和其他语言 32768K。本文详细探讨了如何利用动态规划算法高效求解此问题,并对算法的时间复杂度和空间复杂度进行了深入分析。此外,还提供了具体的实现步骤和代码示例,帮助读者更好地理解和应用这一方法。 ... [详细]
  • 基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析
    基址获取与驱动开发:内核中提取ntoskrnl模块的基地址方法解析 ... [详细]
  • Java SE 文件操作类详解与应用
    ### Java SE 文件操作类详解与应用#### 1. File 类##### 1.1 File 类概述File 类是 Java SE 中用于表示文件和目录路径名的对象。它提供了丰富的方法来操作文件和目录,包括创建、删除、重命名文件,以及获取文件属性和信息。通过 File 类,开发者可以轻松地进行文件系统操作,如检查文件是否存在、读取文件内容、列出目录下的文件等。此外,File 类还支持跨平台操作,确保在不同操作系统中的一致性。 ... [详细]
  • 在处理大图片时,PHP 常常会遇到内存溢出的问题。为了避免这种情况,建议避免使用 `setImageBitmap`、`setImageResource` 或 `BitmapFactory.decodeResource` 等方法直接加载大图。这些函数在处理大图片时会消耗大量内存,导致应用崩溃。推荐采用分块处理、图像压缩和缓存机制等策略,以优化内存使用并提高处理效率。此外,可以考虑使用第三方库如 ImageMagick 或 GD 库来处理大图片,这些库提供了更高效的内存管理和图像处理功能。 ... [详细]
  • 通过采用用户数据报协议(UDP),本研究设计并实现了一种高效的文件传输方法。在发送端,系统利用Java编程语言中的相关类库,如`File`和`FileInputStream`,实现了文件的读取与分段处理,确保了数据的快速传输。该方法不仅提高了传输效率,还降低了网络拥塞的风险,适用于大规模文件传输场景。 ... [详细]
author-avatar
手机用户2502900723
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有