丑数 题解 分手后的思念是犯贱 2022-05-19 10:39 163阅读 0赞 #### 写在前面 #### > 剑指offer 编程题:丑数。 ##### 参考目录 ##### ##### 题目描述 ##### * 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 > 基本思路(暴力解) * 从2开始遍历每一个数判断是不是丑数。如果是丑数计数器count++,如果不是数字加1,继续判断。算法复杂度极大。 > 进阶思路 * 观察发现,每一个丑数本身必然是之前的某个丑数的值乘以2或3或5。我们只需要按照这个规律找到下一个丑数,同时确定下一个丑数是谁。简单的方式是从1开始维护一个数组,数组存放求解第N个丑数过程当中的中间结果。通过递推关系我们可以得出 : * **next\[n\] = min(M2,M3,M5);** * M2为遍历数组前n-1个元素乘以2得到的第一个大于next\[n-1\]的值同理可得M3,M5。 缺陷就是每次都需要遍历前n-1个元素得到M2,M3,M5.整个算法的复杂度为O(N\*N); > 改进方案 其实每次在找M2,M3,M5的过程可以看成在前面的丑数当中找到某个丑数乘以2或3获刚好大于next\[n-1\]。 假设位置i的元素是我们需要找到求得M2的数组下标。每次从头开始到i-1遍历得到的值乘以2都会小于next\[n-1\],同时从i+1开始到n-1得到的乘积都大于next\[n\]。所以通过记录下标的方式可以不用做过多的遍历。以n2,n3,n5表示当前对于2,3,5合适的下标。初始化都为0。当求得的next\[n\]等于某个因子乘出来的积那么对应的下标加1。 > 代码 class Solution { public: int GetUglyNumber_Solution(int index) { if(index<=0) return 0; if(index==1) return 1; vector<int> v; v.push_back(1); int n2=0,n3=0,n5=0; for(int i=0;i<index-1;++i) { int m2 = v[n2]*2; int m3 = v[n3]*3; int m5 = v[n5]*5; int tempMin = min(m2,min(m3,m5)); //竞争产生下一个丑数 (最小) //将产生这个丑数的index*向后挪一位; if(m2==tempMin) ++n2; if(m3==tempMin) ++n3;//这里不能用elseif,因为可能有两个最小值,这时都要挪动 if(m5==tempMin) ++n5; v.push_back(tempMin); } return v[index-1]; } };
相关 丑数 一、题目大意 只包含因子2、3、5的数叫丑数,习惯上把1也看做丑数,求第1500个丑数。 二、分析 (1)常规做法,可对每个正整数依次遍历,直到找到第1500个丑数为止。 小咪咪/ 2023年11月20日 07:29/ 0 赞/ 135 阅读
相关 丑数 ![在这里插入图片描述][20200302095046787.png] include<stdio.h> int main() { int 朱雀/ 2023年07月10日 11:19/ 0 赞/ 152 阅读
相关 丑数 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个 矫情吗;*/ 2023年02月18日 08:16/ 0 赞/ 21 阅读
相关 丑数 \\题目描述 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到 r囧r小猫/ 2022年10月27日 13:48/ 0 赞/ 194 阅读
相关 丑数 把只包含因子2、3和5的数称作丑数,例如6,8都是丑数,但14不是,因为它包含因子7,习惯上我们把1当作第一个丑数,求按从小到大的顺序的第N个丑数。 输入描述:整数N 小咪咪/ 2022年06月08日 08:52/ 0 赞/ 236 阅读
相关 丑数 题解 写在前面 > 剑指offer 编程题:丑数。 参考目录 题目描述 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数, 分手后的思念是犯贱/ 2022年05月19日 10:39/ 0 赞/ 164 阅读
相关 丑数 求第1500个丑数。丑数是不能被2.3.5之外的其他素数整除的数,把丑数从小到大排起来,然后打印第1500个 先写一个典例,我写的, //这是我写的,运行了大概15 你的名字/ 2022年05月18日 10:55/ 0 赞/ 204 阅读
相关 丑数 时间限制:1秒 空间限制:32768K 热度指数:223966 本题知识点: 数组 算法知识视频讲解 题目描述 把只包含质因子2、3和5的数称作丑数(Ugly 本是古典 何须时尚/ 2022年03月09日 10:50/ 0 赞/ 287 阅读
相关 丑数 列表res按序存储丑数 res\[0\] = 1, 下一个丑数产生规则: 1.找出res所有数\2 中第一个 大于 res \[-1\] 的数:res\[n2\] 2 迷南。/ 2022年01月30日 07:43/ 0 赞/ 250 阅读
相关 丑数 丑数就是只包含质因数 2, 3, 5 的正整数。 1.判断丑数 2.找到第n个丑数 (代码很容易看懂) public class UglyNum { 梦里梦外;/ 2021年09月26日 23:24/ 0 赞/ 349 阅读
还没有评论,来说两句吧...