关于丑数
? ? 我們將只包含因子2,4,5的數稱為丑數,比如1, 2, 3, 4, 5, 6, 8, 9, 10, 12等等就是丑數,現在我們來求出從小到大排列的第N個丑數。
? ? 下面提供一種思路,來源于http://www.geeksforgeeks.org/ugly-numbers/。
public int nthUglyNumber(int n) {if(n<=0) return 0;int i2=0,i3=0,i5=0;List<Integer> ugly = new ArrayList<Integer>();ugly.add(1);while(ugly.size()<n){int next_val = Math.min(ugly.get(i2)*2,Math.min(ugly.get(i3)*3,ugly.get(i5)*5));ugly.add(next_val);if(ugly.get(i2)*2==next_val) i2++;if(ugly.get(i3)*3==next_val) i3++;if(ugly.get(i5)*5==next_val) i5++;}return ugly.get(ugly.size()-1);}算法的基本思想就是按從小到大的順序產生丑數,那么如何產生呢?
首先我們初始化一個用來保存丑數的list,第一個丑數是1,然后我們用2,3,5去乘以1,得到2,3,5,接著我們從2,3,5中選出下一個丑數,選擇的依據是這3個數中最小的,得到2,那么2就是第二個丑數了,由于選擇的是2這個因子對應的數,我們將i2加一,
現在我們有1,2兩個丑數了,繼續進行循環,執行這一句
int next_val = Math.min(ugly.get(i2)*2,Math.min(ugly.get(i3)*3,ugly.get(i5)*5));得到4,3,5,選出最小的3,得到下一個丑數3,同上由于選擇的是3這個因子對應的數,我們將i3加一。繼續循環,直到得到第n個丑數。
轉載于:https://www.cnblogs.com/jfwu/p/5564207.html
總結
- 上一篇: Delphi调用外部程序的集中方法
- 下一篇: iPhone新手实用小技巧:更换来电手机