用LinkedList求丑数

import java.util.LinkedList;
import java.util.Scanner;

public class TestChou {
    public static void main(String[] args) {
        System.out.println("求第几个丑数:");
        Scanner sc = new Scanner(System.in);
        int n=sc.nextInt();
        long r=f(n);
        System.out.println(r);
        sc.close();
    }

    private static long f(int n) {
        /**
         * -------------------------
         * 准备3个集合
         * ----------------------------
         * 3| 9 (15) [21]
         * -----------------------------
         * 5| (15) [25] @35@
         * -----------------------------
         * 7| 21 @35@ 49
         * ----------------------------
         * 
         * 3
         * 取最小值
         * *3 *5 *7 往集合放
         * 
         * 5
         * 取最小值
         * *3 *5 *7
         * 
         * 7
         * 取最小值
         * *3 *5 *7
         * 
         * 9
         * 取出最小值
         * *3 *5 *7
         */
        //创建3个集合
        LinkedList<Long>list3=new LinkedList<Long>();
        LinkedList<Long>list5=new LinkedList<Long>();
        LinkedList<Long>list7=new LinkedList<Long>();
        
        list3.add(3L);list5.add(5L);list7.add(7L);
        long r=0;//用来保存每次求的的丑数
        //求丑数,从第一个求到第n个
        for (int i = 1; i <=n; i++) {
            //访问头部值
            Long a = list3.getFirst();
            Long b = list5.getFirst();
            Long c = list7.getFirst();
            //得到最小值
            r=Math.min(a, Math.min(b, c));
            //判断r是a,b,c中的哪些,是什么移除什么,移除最小值
            if(r==a)list3.removeFirst();
            if(r==b)list5.removeFirst();
            if(r==c)list7.removeFirst();
            //最小值,乘以3,5,7放入集合
            list3.add(r*3);
            list5.add(r*5);
            list7.add(r*7);
        }
        return r;
    }
}

运行结果

求第几个丑数:
20
189
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容