国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

26.Ugly Number2

2019-11-08 03:09:54
字體:
供稿:網(wǎng)友

Write a PRogram to find the n-th ugly number.

思路:

一開始,我考慮的是遍歷查找,逐個判斷是否為丑數(shù),果斷耗時(shí)太長。

//TLE,1600th cost 17.148s	public static int nthUglyNumber(int n){		if(n <= 0){			return 0;		}		int count = 0; //記錄丑數(shù)的個數(shù)		int temp = 0;		for (int i = 1; count < n; i++) {			temp = i;			int num2 = temp % 2;			int num3 = temp % 3;			int num5 = temp % 5;			while(num2 == 0||num3 == 0||num5 == 0){				if(num2 == 0){					temp = temp/2;				}				else if(num3 == 0){					temp = temp/3;				}				else{					temp = temp/5;				}				num2 = temp % 2;				num3 = temp % 3;				num5 = temp % 5;			}			if(temp == 1){				count++;			}			if(count == n){				temp = i;			}		}		return temp;	}之后我在網(wǎng)上查找學(xué)習(xí)下,這里需要用到動態(tài)規(guī)劃的思想。

動態(tài)規(guī)劃的基本思想:若要解一個給定的問題,我們需要解不同部分(即子問題),再合并子問題的解以得出原問題的解。

通過上面這句話,我們可以發(fā)現(xiàn)動態(tài)規(guī)劃主要用于解決重疊子問題和優(yōu)化子結(jié)構(gòu),比如最典型的斐波那契數(shù)列。

好的,再回到我們這道題目,那么我們應(yīng)該專注于尋找所有由2,3,5因子組成的數(shù)字,這個思想和計(jì)算n以內(nèi)素?cái)?shù)個數(shù)中的Sieve of Eratosthenes思想很是相近,只不過這道題是找到丑數(shù)然后添加進(jìn)數(shù)組,而CountPrimers是找到非素?cái)?shù)去除掉。那么我們需要將2,3,5的使用次數(shù)和對應(yīng)的操作丑數(shù)均可用同一指針來記錄。然后對之前記錄的丑數(shù)逐個乘以這3個因子。

public static int nthUglyNumber2(int n) {  		if(n == 0)			return 0;		if(n == 1)			return 1;		int[] dp = new int[n];		dp[0] = 1;		int index2 = 0;		int index3 = 0;		int index5 = 0;		for (int i = 1; i < n; i++) {			dp[i] = Math.min(Math.min(dp[index2]*2, dp[index3]*3),dp[index5]*5);			if(dp[i] == dp[index2]*2){				index2++;			}			if(dp[i] == dp[index3]*3){				index3++;			}			if(dp[i] == dp[index5]*5){				index5++;			}		}		return dp[n-1];    }
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 无极县| 郸城县| 防城港市| 平江县| 乐陵市| 呼玛县| 无极县| 长汀县| 玉溪市| 福海县| 浑源县| 淮阳县| 虞城县| 岳西县| 庄河市| 朝阳区| 黄龙县| 镇康县| 高安市| 西青区| 资阳市| 无锡市| 武山县| 河南省| 乐山市| 牙克石市| 西和县| 奉新县| 醴陵市| 仁怀市| 西盟| 福鼎市| 无为县| 南漳县| 西平县| 安溪县| 天津市| 康定县| 浑源县| 固始县| 错那县|