时间效率与空间效率的平衡-面试题34-丑数
来源:互联网 发布:慢镜头软件下载 编辑:程序博客网 时间:2024/05/01 15:45
题目描述
把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。
解法
1、逐个判断每个整数是不是丑数的解法
bool isUgly(int num) { if(num==0)return false; if(num==1)return true; while(num>=2 && num%2==0)num/=2; while(num>=3 && num%3==0)num/=3; while(num>=5 && num%5==0)num/=5; return num==1; }这样做的缺点就是不管是不是丑数都要进行计算,因此效率不高
2、创建数组保存已经找到的数组,用空间换时间的解法
根据丑数的定义,丑数应该是另一个丑数乘以2、3、5的结果(1除外)。因此我们可以创建一个数组,里面是排好序的数组,每个丑数都是前面的丑数乘以2,3,5得到的。
我们用T2、T3、T5来分别表示当前数乘以2,乘以3,乘以5时的结果(T2,T3,T5代表数组的下标),那么下一个丑数就是这些结果的最小值。因为已有的丑数是按顺序存放在数组中,每次生成新的丑数的时候,我们需要更新T2,T3,T5的下标。
Code:
class Solution {public: int GetUglyNumber_Solution(int index) { vector<int> res; res.push_back(1); int T2=0; int T3=0; int T5=0; while(res.size()<index){ int min=Min(res[T2]*2,res[T3]*3,res[T5]*5); res.push_back(min); while(res[T2]*2<=min) T2++; while(res[T3]*3<=min) T3++; while(res[T5]*5<=min) T5++; } return res[index-1]; } int Min(int x,int y,int z){ int min=x<y?x:y; return min<z?min:z; }};
0 0
- 时间效率与空间效率的平衡-面试题34-丑数
- 【剑指offer】5.3时间效率与空间效率的平衡——面试题34:丑数
- 剑指offer 5.3 时间与空间效率平衡 -丑数
- 剑指offer:(34)时间效率和空间效率的平衡 :丑数
- 时间效率与空间效率的平衡-面试题36-数组中的逆序对
- 剑指offer 34题 【时间空间效率的平衡】丑数
- 时间效率与空间效率的平衡
- 时间效率与空间效率的平衡-面试题35-第一个只出现一次的字符
- 【剑指offer】5.3时间效率与空间效率的平衡——面试题36:数组中的逆序对
- 《剑指offer》刷题笔记(时间空间效率的平衡):丑数
- 【剑指offer】5.3时间效率与空间效率的平衡——面试题35:第一个只出现一次的字符
- 【剑指offer】5.3时间效率与空间效率的平衡——面试题37:两个链表的第一个公共结点
- 剑指offer-5-面试34:丑数(优化时间和空间效率)
- 剑指offer 33题 【时间空间效率的平衡】把数组排成最小的数
- 剑指offer 算法 (时间空间效率的平衡)
- 面试题--位操作---延伸到一个用空间换取时间效率的例子
- 剑指offer:(36)时间效率和空间效率的平衡 :数组中的逆序对
- 【剑指offer】5.2时间效率——面试题33:把数组排成最小的数
- ScrollView遇到的问题
- 关于linux软件安装在哪的问题
- 使用Volley加载网络图片
- git使用
- android-pulse-indicator
- 时间效率与空间效率的平衡-面试题34-丑数
- iOS高性能图片架构与设计
- 房地产投资下滑市场波动将持续两三年
- BS通信,代理模式,服务器转发分层代码
- atdilb.h
- 传递元素为指针的二维数组
- spring mvc配置详解
- 工作流适用场景
- 手摸手教你用 Scene 完成炫酷的注册登录动画