剣指offerコード解析——面接問題34ブス数
この問題の詳細な解析は、コードコメントにあります.
/**
* : 2、3、5 。 1500 。 1 。
* @author
* @date 2016 3 24
*/
public class UglyNumber {
/**
* : “ 2、3、5” 2、3、5 。
* , :
* 1 , 2、 3、 5, 2、3、5;
* 2、 3、 5, 9 4、6、10、6、9、15、10、15、25;
* , 。
* , , 。
* , 1500 。 , , 。
* :
* n :1……N, n+1 ;
* 2, N ;
* 1 , 3, N ;
* 5, N 。
* , N+1 。
* , 1500 。
* :
*/
/**
* n
* @param n
* @return n ( -1 )
*/
public static int uglyNumber(int n){
// n 0
if(n<=0){
System.out.println("n 1!");
return -1;
}
// n
int[] a = new int[n];
a[0] = 1;
//
int count = 1;
// n
while(count<n){
int i=0,j=0,z=0;
// 2,
for(i=0;i<a.length && a[i]*2<=a[count-1];i++);
// 3,
for(j=0;j<a.length && a[j]*3<=a[count-1];j++);
// 5,
for(z=0;z<a.length && a[z]*5<=a[count-1];z++);
// i、j、z
int min = a[i]*2;
if(a[j]*3<min)
min = a[j]*3;
if(a[z]*5<min)
min = a[z]*5;
// n+1
a[count++] = min;
}
return a[count-1];
}
/**
*
*/
public static void main(String[] args){
System.out.println(uglyNumber(5));
}
}