264. 丑数 II

题目描述

编写一个程序,找出第 n 个丑数。
丑数就是只包含质因数 2, 3, 5 的正整数。
示例:
输入: n = 10
输出: 12
解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。
说明:  
1. 1 是丑数。
2. n 不超过1690。

想法

三指针法。一部分是丑数数组,另一部分是权重2,3,5。下一个丑数,定义为丑数数组中的数乘以权重,所得的最小值。
那么,2该乘以谁?3该乘以谁?5该乘以谁?
其一,使用三个指针idx[3],告诉它们。比如,2应该乘以ugly[idx[0]],即数组中的第idx[0]个值。(权重2,3,5分别对应指针,idx[0],idx[1],idx[2])
其二,当命中下一个丑数时,说明该指针指向的丑数 乘以对应权重所得积最小。此时,指针应该指向下一个丑数。(idx[]中保存的是丑数数组下标)
其三,要使用三个并列的if让指针指向一个更大的数,不能用if-else。因为有这种情况:
丑数6,可能由于丑数2乘以权重3产生;也可能由于丑数3乘以权重2产生。
丑数10,... 等等。
其四,因为第一个丑数一定是1,因此循环从1开始而不是从0开始。

代码

class Solution {
public:
int nthUglyNumber(int n) {
vector<int> uglynum(n,1),ind(3,0);
for(int i = 1; i < n; i++)
{
int a = uglynum[ind[0]]*2,b=uglynum[ind[1]]*3,c=uglynum[ind[2]]*5;
int temp = min(min(a,b),c);
if(a == temp)
++ind[0];
if(b == temp)
++ind[1];
if(c == temp)
++ind[2];
uglynum[i]=temp;
}
return uglynum[n-1];
}
};

313. 超级丑数

题目描述

编写一段程序来查找第 n 个超级丑数。
超级丑数是指其所有质因数都是长度为 k 的质数列表 primes 中的正整数。
示例:
输入: n = 12, primes = [2,7,13,19]
输出: 32
解释: 给定长度为 4 的质数列表 primes = [2,7,13,19],前 12 个超级丑数序列为:[1,2,4,7,8,13,14,16,19,26,28,32] 。
说明:
1. 1 是任何给定 primes 的超级丑数。
2. 给定 primes 中的数字以升序排列。
3. 0 < k ≤ 100, 0 < n ≤ 106, 0 < primes[i] < 1000 。
第 n 个超级丑数确保在 32 位有符整数范围内。

想法

同上面的想法,使用多指针,其中代码中的2147483647是int数据类型的最大值

代码

class Solution {
public:
int nthSuperUglyNumber(int n, vector<int>& primes) {
int k = primes.size(),i,j;
vector<int> uglynum(n,1),idx(k,0),a(k,0);
for(i = 1; i < n; i++)
{
int minnum = 2147483647;
for(j = 0; j < k; j++)
{
a[j] = uglynum[idx[j]]*primes[j];
if(a[j] < minnum)
minnum = a[j];
}
for(j = 0; j < k; j++)
{
if(a[j] == minnum)
++idx[j];
}
uglynum[i] = minnum;
}
return uglynum[n-1];
}
};

最新文章

  1. 【hive】——Hive基本操作
  2. Mongodb启动命令mongod参数说明
  3. 去除 Google 重定向
  4. 读取DBF文件数据
  5. ue4标签测试与总结(UPROPERTY)
  6. [Unity3d插件]EasyTouch的初步使用
  7. paper 76:膨胀、腐蚀、开、闭运算——数字图像处理中的形态学
  8. 29. 栈的push,pop序列
  9. QNetworkAccessManager的异步与线程
  10. Junit4单元测试之高级用法
  11. 转 Linux下的GoldenGate的启动关闭Shell脚本(独立)
  12. 基于keepalived搭建MySQL高可用集群
  13. java集合框架(hashSet自定义元素是否相同,重写hashCode和equals方法)
  14. Vmware10中Centos7挂载Windows主机的共享文件夹,提示:Error: cannot mount filesystem: No such device
  15. iOS网络篇
  16. Luogu4652 CEOI2017 One-Way Streets 树上差分
  17. SparseArray源码解析
  18. Codeforces Round #420 (Div. 2) E. Okabe and El Psy Kongroo 矩阵快速幂优化dp
  19. Configuration Section Designer for VS2017
  20. Volume Shadow Copy Service(VSS)如何工作

热门文章

  1. HTTP强缓存和协商缓存
  2. 在eclipse打开jsp文件变成文本的解决:
  3. AT4811 [ABC160D] Line++ 题解
  4. libevent源码学习(9):事件event
  5. libevent源码学习(5):TAILQ_QUEUE解析
  6. RPA账户和密码管理方案
  7. 【LeetCode】160. Intersection of Two Linked Lists 解题报告(Python)
  8. 移动端H5-iPhone安全距离适配
  9. HTML5 +Java基础 大一结业认证考试试题 - 云南农业职业技术学院 - 互联网技术学院 - 美和易思校企合作专业
  10. 【MySQL作业】MySQL函数——美和易思字符串函数应用习题