劍指offer34題:java
把只包含質因子二、3和5的數稱做醜數(Ugly Number)。例如六、8都是醜數,但14不是,由於它包含質因子7。 習慣上咱們把1當作是第一個醜數。求按從小到大的順序的第N個醜數。算法
解題思路:本題劍指上說的很麻煩,其實思路很簡單,咱們只用比較3個數:用於乘2的最小的數、用於乘3的最小的數,用於乘5的最小的數。spa
package com.nowcoder.jianzhi; import org.junit.Test; import java.util.ArrayList; /** * 把只包含質因子二、3和5的數稱做醜數(Ugly Number)。 * 例如六、8都是醜數,但14不是,由於它包含質因子7。 * 習慣上咱們把1當作是第一個醜數。求按從小到大的順序的第N個醜數。 * 算法思路:三路歸併 */ public class GetUglyNumber_Solution_33 { public int GetUglyNumber_Solution(int n) { if(n<=0) return 0; ArrayList<Integer> list = new ArrayList<Integer>(); list.add(1); int i = 0 ; int j = 0 ; int k = 0 ; while (list.size()<n){//循環index-1次,當list的大小小於所求的第n個元素的序列的時候 int t = Math.min(list.get(i)*2,Math.min(list.get(j)*3,list.get(k)*5)); //找出三個數裏面的最小值 list.add(t); if(list.get(i)*2==t) i++; if(list.get(j)*3==t) j++; if(list.get(k)*5==t) k++; } return list.get(list.size()-1); } @Test public void test(){ System.out.println(GetUglyNumber_Solution(1000)+" "); } }