日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于丑数

發布時間:2023/12/19 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于丑数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? 我們將只包含因子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

總結

以上是生活随笔為你收集整理的关于丑数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。