丑數


劍指offer34題:

把只包含質因子2、3和5的數稱作丑數(Ugly Number)。例如6、8都是丑數,但14不是,因為它包含質因子7。 習慣上我們把1當做是第一個丑數。求按從小到大的順序的第N個丑數。

解題思路:本題劍指上說的很麻煩,其實思路很簡單,我們只用比較3個數:用於乘2的最小的數、用於乘3的最小的數,用於乘5的最小的數。

package com.nowcoder.jianzhi;

import org.junit.Test;

import java.util.ArrayList;

/**
 * 把只包含質因子2、3和5的數稱作丑數(Ugly Number)。
 * 例如6、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)+" ");
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM