【Offer】[49] 【丑数】】的更多相关文章

剑指 Offer 49. 丑数 Offer_49 题目详情 解法一:小根堆+哈希表/HashSet 根据丑数的定义,如果a是丑数,那么a2, a3以及a*5都是丑数 可以使用小根堆存储按照从小到大排序的丑数. package com.walegarrett.offer; import java.util.HashMap; import java.util.PriorityQueue; /** * @Author WaleGarrett * @Date 2021/2/8 21:39 */ /**…
题目 剑指 Offer 49. 丑数 思路1 丑数是只包含 2.3.5 这三个质因子的数字,同时 1 也是丑数.要计算出 n 之前全部的丑数,就必须将 n 之前的每个丑数都乘以 2.3.5,选取出最小的那个数 但是如果每计算一个丑数都要将之前重新遍历一遍,时间复杂度较高 因此我们使用动态规划,创建一个dp数组,dp[i] 代表第 i + 1 个丑数,同时状态转移方程为: \[\begin{cases} dp[a]×2>dp[i−1]≥dp[a−1]×2 \\ dp[b]×3>dp[i−1]≥d…
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做第一个丑数. 思路 直观思路:逐一判断每个整数是否为丑数,效率太低. 空间换时间的解法: 创建数组存放已经排序好的丑数,这将消耗一定的内存开销.根据丑数的定义,丑数应该是另一个丑数的2.3或者5倍的结果,…
题目信息 时间: 2019-07-03 题目链接:Leetcode tag:动态规划 小根堆 难易程度:中等 题目描述: 我们把只包含质因子 2.3 和 5 的数称作丑数(Ugly Number).求按从小到大的顺序的第 n 个丑数. 示例: 输入: 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,那么丑数p = 2 ^ x * 3 ^ y * 5 ^ z,换句话说一个丑数一定由另一个丑数乘以2或者乘以3或者乘以5得到,那么我们从1开始乘以2,3,5,就得到2,3,5三个丑数,在从这三个丑数出发乘以2,3,5就得到4,6,10,6,9,15,10,15,25九个丑数,我们发现这种方法会得到重复的丑数,而且我们题目要求第N个丑数,这样的方法得到的丑数也是无序的.那么我们可以维护三个队列: (1)丑数数组: 1 乘以2的…
题目描述 我们把只包含质因子 2.3 和 5 的数称作丑数(Ugly Number).求按从小到大的顺序的第 n 个丑数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数. 说明: 1 是丑数. n 不超过1690. 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/chou-shu-lcof 代码实现 class Solution { public: in…
面试题 49. 丑数 题目描述 题目:把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 设计一个算法,找出只含素因子2,3,5 的第 n 小的数.符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12 ... 解答过程 样例 如果n = 9, 返回 10. 挑战 要求时间复杂度为O(nlogn)或者O(n) Java 实现 public clas…
[剑指Offer]丑数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 解题方法 第一感觉肯定是把每个数字逐个遍历判断是否是丑数的方式,这样的话效率不高. 比较巧妙的方式是使用空间换时间.我们…
问题描述 我们把只包含因子 2.3 和 5 的数称作丑数(Ugly Number).求按从小到大的顺序的第 n 个丑数. 示例: 输入: n = 10 输出: 12 解释: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数. 说明:   1 是丑数. n 不超过1690. 代码 class Solution { public: int nthUglyNumber(int n) { vector<int> ind(3,0),uglynum(n,1); int tm…
把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. leetcode上也有这道题.不过是判断一个数是否为丑数.貌似是我第二道解出来的leetcode,印象还蛮深的.用了递归. class Solution { public: bool isUgly(int num) { ) return false; ) return true; ==) isUgly(num/); =…
该题目来源于牛客网<剑指offer>专题. 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7.习惯上我们把1当做是第一个丑数. 求按从小到大的顺序的第N个丑数. Go语言实现: func getUglyNumber(index int) int { //第0-6个丑数,分别是0-6 if index < 7 { return index } ​ i2 := 0 i3 := 0 i5 := 0 //从1开始,1*2,1*3,…
题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: 输入包括一个整数N(1<=N<=1500). 输出: 可能有多组测试数据,对于每组数据,输出第N个丑数. 样例输入: 样例输出: 解题思路: 最简单的思路是,从1到大数,每个数都检测一遍是否是丑数,检测方法可以考虑 int ugly(int number){ == ){ ); } == ){ );…
题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 题目地址 https://www.nowcoder.com/practice/6aa9e04fc3794f68acf8778237ba065b?tpId=13&tqId=11186&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interv…
原创博文,转载请注明出处!本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1. 题目 2. 思路 空间换时间的方法.由于题目要求按序查找丑数,可以采用辅助容器vector按序存储丑数,返回指定位置丑数的策略.用辅助容器vector按序存储丑数的关键在于怎么按序计算丑数.按序计算丑数的方法:设辅助变量t2为一个丑数在vector中的索引,t2位置之前的丑数*2之后小于等于最大丑数,t2位置及t2位置之后的丑数*2后大于最大丑数.设辅助变量t3为一个丑数在vector中的索引,t…
本文算法使用python3实现 1. 问题1 1.1 题目描述:   把只包含因子2.3和5的数称作丑数(Ugly Number).判断一个数是否是丑数.   时间限制:1s:空间限制:32768K 1.2 思路描述:   大致思路:将该数依次除以 $ 2,3,5 $ ,若最后商为 $ 1 $ 则是丑数,否则,不是丑数. 1.3 程序代码: class Solution: def isUgly(self, num): '''判断num是否是丑数''' if num <= 0: return Fa…
丑数:只有2 3 5 这三个因子的数,求前(第)1500个.习惯上我们把1当作第一个丑数 例如 6, 8是丑数.14不是. #include <stdio.h> int Min(int x,int y, int z){ int min = (x <= y) ? x : y; return min = (z <= min) ? z : min; } int GetUglyNumber(int index){ if(index <= 0){ return 0; } int* ug…
题目描述: 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 解题思路: 1. 常规思路,从1开始到index判断每个数是否是丑数,但这样时间上肯定过不了,因为存在重复计算. 2. 用空间换时间的思路,发现每一个丑数都是由之前的丑数乘2,3或5得到的,所以考虑从第一个丑数开始向后推到第index个.由于需要维持一个有序的丑数序列,对于每个丑数都分别乘2,3,5这三…
题目描述 把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数.   //使用遍历判断的方法 class Solution01 { public: int GetUglyNumber_Solution(int index) { ); ; ; cnt < index; ++i) { if (isChouShu(i)) cnt++; if (cnt == index) re…
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:…
一.题目大意 给你一个数n,要求返回第n个丑数.其中,丑数的定义如下: 丑数是指只包含因子2.3和5的数.(数字1也是丑数,不过是个特例)引用<剑指offer>上的话来说,对于一个数M,如果M能被2整除,就连续除以2:若果能被3整除,就连续除以3:如果能被5整除,就连续除以5.如果最终的结果是1的话,那么M就是丑数,否则M不是丑数.以下是判断一个数是否为丑数的代码: bool IsUglyNumber(int num) { while(num % 2 == 0) num /= 2; while…
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 我们把只包含因子2.3和5的数称作丑数( Ugly Number).求按从小到大的顺序的第1500个丑数.例如,6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当作第一个丑数. 牛客网刷题地址 思路分析 直接求,判断每一个数是否为丑数,时间效率低下 创建数组存放已经排序好的丑数,这将消耗一定的内存开销.根据丑数的定义,丑数应该是另一个丑数的2.3或者5倍的结果,因此,我们从数组中已有的丑数里找到三个丑数T2.T3.T5,…
[题目]把只包含因子2.3和5的数称作丑数(Ugly Number). * 例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 解法一:此解提交运行超时,不推荐. package com.exe11.offer; /** * [题目]把只包含因子2.3和5的数称作丑数(Ugly Number). * 例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. * @auth…
剑指Offer--丑数 前言     参照<剑指Offer>,通过洞悉其思想并消化吸收,改为java实现,供自己以后巩固. package cn.edu.ujn.offersword; import java.util.Scanner; public class C5_34_UglyNumber { /** * @date 2016-09-16 * @number 01 * @author SHQ * 丑数 * 题目描述 *把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.…
// 面试题49:丑数 // 题目:我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到 // 大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因为它包含因子7. // 习惯上我们把1当做第一个丑数. #include <iostream> // ====================算法1的代码==================== //不用额外的内存,直接计算 bool IsUgly(int number)//判断是不是丑数 { == ) numbe…
剑指Offer - 九度1214 - 丑数2013-11-21 21:06 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: 输入包括一个整数N(1<=N<=1500). 输出: 可能有多组测试数据,对于每组数据,输出第N个丑数. 样例输入: 3 样例输出: 3 题意分析: 题目要求按照从小到大的顺序找出因子只有2, 3, 5的第N个数. 由于所有…
剑指Offer(三十三):丑数 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn.net/baidu_31657889/ github:https://github.com/aimi-cn/AILearners 一.引子 这个系列是我在牛客网上刷<剑指Offer>的刷题笔记,旨在提升下自己的算法能力. 查看完整的剑指Offer算法题解析请点击CSDN和github链接: 剑指Offer完整习题解析CS…
把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 输入: 输入包括一个整数N(1<=N<=1500). 输出: 可能有多组测试数据,对于每组数据, 输出第N个丑数. 样例输入: 3 样例输出: [解题思路]本题最直观的想法就是从1开始遍历,然后判断每一个数是否为丑数,但这样肯定是一种非常耗时间的做法,不可取.那么我们是否可用从丑数的特点出发呢,从另一个角度来思考问题…
一.题目:丑数 题目:我们把只包含因子2.3和5的数称作丑数(Ugly Number).求按从小到大的顺序的第1500个丑数.例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做第一个丑数. 二.两种解决方案 2.1 一一遍历法:时间效率低下 使用遍历法求第k个丑数,从1开始遍历,如果是丑数则count++,直到count=k为止.那么如何判断丑数呢?根据丑数的定义,丑数只有2,3,5这三个因子,那么我们就拿数字除以这三个因子.具体算法如下: Step1.如果一个数能够被2整除,…
问题描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 思路1:(显然是比较耗时的) 直接去判断每个整数是不是丑数,然后找到第N个小的数.(牛客网提交超时) public int GetUglyNumber_Solution(int index) { if(index <= 0){ return 0; } int number = 0; int found =…
只包含因子2.3.5的数称作丑数. #include <iostream> #include <vector> using namespace std; int GetUglyNumber(int n) { ) ; vector<); UglyNum[] = ; vector<int>::iterator it2 = UglyNum.begin(); vector<int>::iterator it3 = UglyNum.begin(); vector…