264. Ugly Number II丑数

2024-01-04 19:38
文章标签 ii number 丑数 ugly 264

本文主要是介绍264. Ugly Number II丑数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。


解答

逐个判断每个整数是不是丑数,效率低

public:bool isUglyNumber(int num){while(num%2 == 0)num/=2;while(num%3 ==0)num/=3;while(num%5 == 0)num/=5;if(num == 1)return true;elsereturn false;}int GetUglyNumber_Solution(int index) {if(index <=0)return 0;int count = 0;int i = 0;while(count<index){   ++i;if(isUglyNumber(i))++count;}return i;}

空间换时间,创建数组保存已经找到的丑数

  根据丑数的定义可以知道,丑数应该是另一个丑数乘以2或3或5的结果(1除外)。因此我们可以创建一个数组,里面的数字是排序好的丑数。
  这种思路的关键在于怎样确保数组里面的丑数是排序好的。假设数组中已经有了若干个排序好的丑数。我们将目前最大的丑数记为M。
  那么下一个丑数肯定是前面某一个丑数乘以2或3或5的结果。所以我们首先考虑把已有的每个丑数乘以2。在乘以2的时候,能得到若干个小于或等于M的数。由于是按照顺序生成的,小于或等于M的数肯定已经在数组中了,不需要考虑这些数;此外还会得到若干个大于M的结果,但我们只需要第一个大于M的结果。我们把乘以2大于M的第一个数记为M2。同样,我们可以得到M3和M5。那么下一个丑数就应该是M2,M3,M5中的最小值。
  上述分析中要把M之前的每个丑数都乘以2、3和5。但实际不需要这么做。以乘以2为例,肯定存在一个丑数T2,排在它之前的每一个丑数乘以2得到的结果都小于M,在它之后的每一个丑数乘以2都大于M。我们只需记下这个数的位置,同时每次生成新的丑数时,去更新这个T2即可。同理,对3和5来说,存在T3和T5。

int GetUglyNumber_Solution(int index){if(index <= 0)return 0;int* uglyNumbers = new int[index];uglyNumbers[0] = 1;int nextUglyNumber = 1;int* pMultiple2 = uglyNumbers;int* pMultiple3 = uglyNumbers;int* pMultiple5 = uglyNumbers;while(nextUglyNumber < index){uglyNumbers[nextUglyNumber] = min(*pMultiple2*2,min(*pMultiple3*3,*pMultiple5*5));while(*pMultiple2*2<=uglyNumbers[nextUglyNumber])++pMultiple2;while(*pMultiple3*3<=uglyNumbers[nextUglyNumber])++pMultiple3;while(*pMultiple5*5<=uglyNumbers[nextUglyNumber])++pMultiple5;++nextUglyNumber;}int ret = uglyNumbers[nextUglyNumber-1];delete [] uglyNumbers;return ret;}

这篇关于264. Ugly Number II丑数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/570387

相关文章

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)

学习记录:js算法(二十八):删除排序链表中的重复元素、删除排序链表中的重复元素II

文章目录 删除排序链表中的重复元素我的思路解法一:循环解法二:递归 网上思路 删除排序链表中的重复元素 II我的思路网上思路 总结 删除排序链表中的重复元素 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 图一 图二 示例 1:(图一)输入:head = [1,1,2]输出:[1,2]示例 2:(图

LeetCode:3177. 求出最长好子序列 II 哈希表+动态规划实现n*k时间复杂度

3177. 求出最长好子序列 II 题目链接 题目描述 给你一个整数数组 nums 和一个非负整数k 。如果一个整数序列 seq 满足在下标范围 [0, seq.length - 2] 中 最多只有 k 个下标i满足 seq[i] != seq[i + 1] ,那么我们称这个整数序列为好序列。请你返回 nums中好子序列的最长长度。 实例1: 输入:nums = [1,2,1,1,3],

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号

步骤 1:安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件,完成后可能需要重启 Jenkins。 步骤 2:配置版本号生成 打开项目配置页面。在下方找到 “Build Env

代码随想录训练营day37|52. 携带研究材料,518.零钱兑换II,377. 组合总和 Ⅳ,70. 爬楼梯

52. 携带研究材料 这是一个完全背包问题,就是每个物品可以无限放。 在一维滚动数组的时候规定了遍历顺序是要从后往前的,就是因为不能多次放物体。 所以这里能多次放物体只需要把遍历顺序改改就好了 # include<iostream># include<vector>using namespace std;int main(){int n,m;cin>>n>>m;std::vector<i

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II

代码随想录刷题day25丨491.递增子序列 ,46.全排列 ,47.全排列 II 1.题目 1.1递增子序列 题目链接:491. 非递减子序列 - 力扣(LeetCode) 视频讲解:回溯算法精讲,树层去重与树枝去重 | LeetCode:491.递增子序列_哔哩哔哩_bilibili 文档讲解:https://programmercarl.com/0491.%E9%80%92%E