题解 | #丑数#

丑数

https://www.nowcoder.com/practice/6aa9e04fc3794f68acf8778237ba065b

import java.util.*;
public class Solution {
    
    public int GetUglyNumber_Solution1(int index) {
        List<Integer> list1=new ArrayList<Integer>();//存储素数
        List<Integer> list2=new ArrayList<Integer>();//存储丑数
        int i=1;
        while(true){
            getSubNum(i,list1,list2);
            if(list2.size()==index){
                return list2.get(index-1);
            }
            i++;
        }

    }
    public void getSubNum(int num,List<Integer> list1,List<Integer> list2){
        if(num==1){
            list1.add(num);
            list2.add(num);
            return;
        }
        int div_num=num/2;
        Set<Integer> set=new HashSet<Integer>();
        for(int i=1;i<=num;i++){
            int tmp1=num/i;
            int tmp2=num%i;
            if(tmp2==0){
                set.add(tmp1);
                set.add(num/i);
            }
        }
        if(set.size()==2){
            list1.add(num);
        }
        for(int n:list1){
            if(set.contains(n)&&n!=1&&n!=2&&n!=3&&n!=5){
                return;
            }
        }
        list2.add(num);
        
    }
    public int GetUglyNumber_Solution(int index) {
        if(index<=0)return 0;
        int num2=0;
        int num3=0;
        int num5=0;
        List<Integer> list=new ArrayList<Integer>();
        list.add(0,1);
        //头插法,第一个元素即为方法目标对象
        for(int i=1;i<index;i++){
            int min_num=Math.min(2*list.get(num2),Math.min(3*list.get(num3),5*list.get(num5)));
            list.add(min_num);
            if(min_num==2*list.get(num2))num2++;
            if(min_num==3*list.get(num3))num3++;
            if(min_num==5*list.get(num5))num5++;
            
        }
        return list.get(index-1);
    }
}

全部评论

相关推荐

点赞 评论 收藏
分享
offer多多的六边形战士很无语:看了你的博客,感觉挺不错的,可以把你的访问量和粉丝数在简历里提一下,闪光点(仅个人意见)
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务