剑指Offer-32.丑数(C++/Java)
题目:
把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
分析:
可以从1开始去判断每一个数是不是丑数,即判断数字是不是只能被2,3,5整除。当然这样比较耗时。
每一个丑数都是由较小的丑数乘上2或3或5来得到的,2,3,5本身就是由1乘上2,3,5而来。后面生成的丑数可以从前面的丑数分别乘上2,3,5取一个最小的即可,所乘的丑数也不用每次都从最开始遍历,设置三个指针,分别指向乘2,乘3,乘5的丑数即可,每次新出现一个丑数,更新三个指针即可,更新的条件,便是乘上2,3,5要大于当前的丑数。
程序:
C++
class Solution {
public:
int GetUglyNumber_Solution(int index) {
if(index <= )
return ;
if(index == )
return ;
vector<int> res(index, );
res[] = ;
int u2 = ;
int u3 = ;
int u5 = ;
for(int i = ;i <index; ++i){
res[i] = min(min(res[u2]*, res[u3]*), res[u5]*);
while(res[u2]* <= res[i])
u2++;
while(res[u3]* <= res[i])
u3++;
while(res[u5]* <= res[i])
u5++;
}
return res[index-];
}
};
Java
public class Solution {
public int GetUglyNumber_Solution(int index) {
if(index <= 0)
return 0;
if(index == 1)
return 1;
int[] res = new int[index];
res[0] = 1;
int u2 = 0;
int u3 = 0;
int u5 = 0;
for(int i = 1; i < index; ++i){
res[i] = min(min(res[u2]*2, res[u3]*3), res[u5]*5);
if(res[u2]*2 == res[i])
u2++;
if(res[u3]*3 == res[i])
u3++;
if(res[u5]*5 == res[i])
u5++;
}
return res[index-1];
}
private int min(int num1, int num2){
return num1 < num2 ? num1 : num2;
}
}
剑指Offer-32.丑数(C++/Java)的更多相关文章
- 剑指 Offer 49. 丑数 + 小根堆 + 动态规划
剑指 Offer 49. 丑数 Offer_49 题目详情 解法一:小根堆+哈希表/HashSet 根据丑数的定义,如果a是丑数,那么a2, a3以及a*5都是丑数 可以使用小根堆存储按照从小到大排序 ...
- 【剑指Offer】丑数 解题报告
[剑指Offer]丑数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: ...
- 力扣 - 剑指 Offer 49. 丑数
题目 剑指 Offer 49. 丑数 思路1 丑数是只包含 2.3.5 这三个质因子的数字,同时 1 也是丑数.要计算出 n 之前全部的丑数,就必须将 n 之前的每个丑数都乘以 2.3.5,选取出最小 ...
- 【Java】 剑指offer(49) 丑数
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 我们把只包含因子2.3和5的数称作丑数(Ugly Number). ...
- 【剑指offer】丑数
把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. leetcode上也 ...
- Go语言实现:【剑指offer】丑数
该题目来源于牛客网<剑指offer>专题. 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7.习惯上我们把1当做是第一个丑 ...
- 《剑指offer》丑数
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:
- 剑指offer 34_丑数
丑数:只有2 3 5 这三个因子的数,求前(第)1500个.习惯上我们把1当作第一个丑数 例如 6, 8是丑数.14不是. #include <stdio.h> int Min(int x ...
- 每日一题 - 剑指 Offer 49. 丑数
题目信息 时间: 2019-07-03 题目链接:Leetcode tag:动态规划 小根堆 难易程度:中等 题目描述: 我们把只包含质因子 2.3 和 5 的数称作丑数(Ugly Number).求 ...
- 剑指OFFER之丑数(九度OJ1214)
题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: 输 ...
随机推荐
- ios swift多线程的实现 Multithreading
1.多线程的概念 Multithreading多线程是指从软件或硬件上,实现多个线程并发执行的技术.使得能够同步完成多项任务,提高资源使用效率. 1.1 任务.进程和线程 任务Task:应用程序完成的 ...
- 第二十七章 system v消息队列(三)
消息队列实现回射客户/服务器 msg_srv.c #include <stdio.h> #include <stdlib.h> #include <unistd.h> ...
- 说说 Python3 中的数字处理
最近在处理订单相关的问题,踩了数字的一些坑,在此记录下. 其中有问题的代码涉及金额比较,便于描述,假设了下面一段代码 def is_paid(pay_price, paid_price): retur ...
- 使用msfvenom生成木马
msfvenom Options: -p, --payload < payload> 指定需要使用的payload(攻击荷载).如果需要使用自定义的payload,请使用& #03 ...
- CSPS模拟测试59
这场考得我心态爆炸......... 开场T1只会$n^{2}$,然后发现bfs时每个点只需要被更新一次,其他的更新都是没用的. 也就是说,我们可以只更新还没被更新的点? 于是我先YY了一个链表,发现 ...
- Js对象继承小结
1.继承 对象的定义好用一些的一般是把实例对象的属性定义在类里面,通过this指针指向具体实例属性.定义对象的public方法时将其绑定到prototype中.子类在继承父类时可以通过对象冒充来继承父 ...
- NOIP模拟测试7
期望得分:60+60+60 实际得分:60+60+0 这次考试主要是T3搜索打挂了(我可是靠搜索吃饭的); 1.数组开小了,不过开大数组只拿到了10分的好成绩. 2.题意没审清(其实是他没说清). 以 ...
- Spring容器自动调用方法的两种方式
先看一个Spring中Bean的实例化过程: 1.配置文件中指定Bean的init-method参数 <bean class="com.jts.service.UserService& ...
- 字符串模拟大数相加——Java实现
本题是CVTE二面编程题,首先考虑返回值肯定是一个字符串(int会有溢出可能),并且两个字符串只含数字,不含”+“.”-“这种. 代码如下: public static String add(Stri ...
- python经典面试算法题1.2:如何从无序链表中移除重复项
本题目摘自<Python程序员面试算法宝典>,我会每天做一道这本书上的题目,并分享出来,统一放在我博客内,收集在一个分类中. 1.2 如何实现链表的逆序 [蚂蚁金服面试题] 难度系数:⭐⭐ ...