剣指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));
	}
}