[剑指offer]丑数

在这里插入图片描述
思路:
一个丑数只有因子2,3,5,那么一个丑数一定由另一个丑数乘以2,3,5得到。那么从1开始乘以2,3,5,就得到2,3,5,从2,3,5开始乘以2,3,5,分别得到4,6,10,6,9,10,10,15,25九个丑数。但是此序列是无序且有重复的。这里判断乘以2,3,5一次之后最小的数,将此最小的数加入list容器中,如果此最小的数等于乘以2,3,5之后的任一数,就将此数对应的2或3或5的变量加1,意思即之后从下一个丑数开始乘2,3,5。我们只用比较3个数:用于乘2的最小的数、用于乘3的最小的数,用于乘5的最小的数。
实现:

import java.util.ArrayList;
public class Solution {
    public int GetUglyNumber_Solution(int index) {
        if( index <= 0 ) return 0;
        ArrayList<Integer> list = new ArrayList<>();
        list.add(1);
        int i2 = 0,i3 = 0, i5 = 0;
        while( list.size() < index ){
            int m2 = list.get(i2) * 2 ;
            int m3 = list.get(i3) * 3 ;
            int m5 = list.get(i5) * 5 ;
            int min = Math.min( m2, Math.min( m3,m5 ) ) ;
            list.add(min);
            if( min == m2 ) i2++ ;
            if( min == m3 ) i3++ ;
            if( min == m5 ) i5++ ;
        }
        return list.get(list.size()-1);
    }
}

猜你喜欢

转载自blog.csdn.net/qq_37344518/article/details/84888457