剑指offer之寻找丑数,待字闺中之序列生成分析
来源:互联网 发布:c语言编程案例 编辑:程序博客网 时间:2024/06/13 16:49
题目来源:剑指offer之寻找丑数 与 待字闺中之序列生成分析
两个题目其实是同一个问题,所有放在一起,算是总结一下,题目如下:
给定一个表达式2^i*5^j,其中i,j为非负整数。请找到一种方法,生成如下序列:
2^0 * 5^0 = 12^1 * 5^0 = 22^2 * 5^0 = 42^0 * 5^1 = 52^3 * 5^0 = 82^1 * 5^1 = 102^4 * 5^0 = 162^2 * 5^1 = 202^0 * 5^2 = 25.........
阅读题目,要得到生成的数字序列是有序的,尽管题目中,并没有明说。这个题目的方法,是比较多的。我们在这里介绍几个。
一个简单的方法
很多同学,应该接触过丑数那个题目吧?这个题目相比之下,还要简单一些。i,j分别是2和5的指数, 则方法的过程如下:
i,j 从0开始,记录较小的值作为序列的当前生成值。则i=j=0时,最小值为1,就是第一个元素;
两个值都是最小元素,所以i和j,都自增1,在最小值1的基础之上乘以2和5得到2,5, 取较小的2作为序列的值,即2,第二个;
此时,只对i进行变化,自增1,在其上一个值的基础之上乘以2,即,2*2=4,再与5比较最小值。具体代码如下:
vector<int> UglyNumber(int n){vector<int> ugly(n);ugly[0] = 1;int i2 = 0,i5 = 0,index;//i2和i5表示当前即将乘以2和5的下标for(index = 1;index < n;index++){int curUgly = min(ugly[i2]*2,ugly[i5]*5);ugly[index] = curUgly;while(ugly[i2] * 2 <= curUgly)i2++; //修改i2while(ugly[i5] * 5 <= curUgly)i5++; //修改i5}return ugly;}int main(){int n;while(cin >> n){vector<int> ugly = UglyNumber(n);for(int i = 0;i < n;i++)cout << ugly[i] << " ";cout << endl;}}
2 2
- 剑指offer之寻找丑数,待字闺中之序列生成分析
- 剑指offer系列之三十二:寻找丑数
- 剑指Offer之 - 丑数
- 剑指offer之丑数
- 剑指offer之丑数
- 【剑指offer】之丑数
- 剑指offer之丑数
- 码农小汪-剑指Offer之31 -丑数
- 剑指offer系列之32:丑数
- 剑指offer(二十八)之丑数
- 剑指offer ——寻找丑数
- 待字闺中之构造最大数分析
- 待字闺中之逆序分析
- 待字闺中之此起彼伏分析
- 剑指offer之面试题34丑数
- 剑指Offer之面试题34:丑数
- 算法分析---寻找丑数
- 待字闺中之Magic Index 分析
- 查看mysql版本的四种方法
- C语言编译全过程介绍
- spark上的scala学习笔记
- 网络编程浅析(一)
- 让python代码运行的更快
- 剑指offer之寻找丑数,待字闺中之序列生成分析
- ORCFile存储格式
- .net 3.5 HttpRequest 请求的url 网址 如何实现不转义
- 网络编程浅析(二)
- ruby学习_2
- 【已解决】 java.security.KeyStoreException: java.security.NoSuchAlgorithmException
- C++技术问题总结-第2篇 进程通信
- dell 笔记本 ubuntu 安装 无线网卡驱动(Qualcomm Atheros QCA9565 / AR9565 Wireless Network Adapter)
- 时间管理-读文笔记-番茄时间管理法(Pomodoro Technique)