美文网首页我爱编程
Leetcode-Java(二十七)

Leetcode-Java(二十七)

作者: 文哥的学习日记 | 来源:发表于2018-06-21 23:55 被阅读52次

263. Ugly Number

class Solution {
    public boolean isUgly(int num) {
        if(num==1) return true;
        if(num==0) return false;
        while(num%2==0) num=num>>1;
        while(num%3==0) num=num/3;
        while(num%5==0) num=num/5;
        return num==1;
    }
}

264. Ugly Number II

分析:这道题最直观地想法是暴力查找,但不用想也知道会超时,于是我想能不能找到规律,就是从每个生成数的系数。但是很遗憾。
于是想到后面的每个ugly数都是由前面的ugly数所产生的。那这样的话就构成了一个生成链。但是这里有个重要的问题就是,生成链必须是有序的。最开始想法是每添加一个元素就排序,但是也会TLE,后来发现,当我们生成x时,我们下个希望生成的数肯定是大于x的,那么就可以从前向后查找list,看当2,3,*5后生成的大于x的数中,找到最小值,然后将其添加到list中,然后更新cur。
这里还有个trick,就是如果每次都从最开始搜索,其实是没有必要的,直接从上次结束的位置搜索即可,因为那个位置以前都肯定小于cur.

class Solution {
    public int nthUglyNumber(int n) {
        List<Integer> list = new ArrayList<>();
        list.add(1);
        int cur = 2;

        int i1= 0,i2 = 0,i3 = 0;
        int min1,min2,min3;
        while (list.size()<n){
            while(list.get(i1)*2<cur) i1++;
            min1 = list.get(i1)*2;
            while(list.get(i2)*3<cur) i2++;
            min2 = list.get(i2)*3;
            while(list.get(i3)*5<cur) i3++;
            min3 = list.get(i3)*5;

            int next = min1<min2?min1:min2;
            next = next<min3?next:min3;

            cur = next+1;
            list.add(next);
        }
        return list.get(n-1);  
    }
}

268. Missing Number

class Solution {
    public int missingNumber(int[] nums) {
        int sumRes = nums.length * (nums.length + 1) / 2;
        for(int num:nums)
            sumRes -= num;
        return sumRes;
    }
}

相关文章

  • Leetcode-Java(二十七)

    263. Ugly Number 264. Ugly Number II 分析:这道题最直观地想法是暴力查找,但不...

  • leetcode 100

    github个人所有的leetcode题解,都在我的 leetcode-java,欢迎star和共同探讨。leet...

  • Leetcode-Java(三十)

    299. Bulls and Cows 一开始我用的是HashSet保存两个字符串中出现过的数字但是没有匹配上的,...

  • Leetcode-Java(十四)

    131. Palindrome Partitioning 回溯法 132. Palindrome Partitio...

  • Leetcode-Java(三十一)

    303. Range Sum Query - Immutable 用一个数组保存从0到当前位置的和。 304. R...

  • Leetcode-Java(二十二)

    211. Add and Search Word - Data structure design 建立一棵字典树,...

  • Leetcode-Java(二十三)

    221. Maximal Square 动态规划,只用一个一维数组,这里要注意代码里的对应关系,相当于在原数组的基...

  • Leetcode-Java(二十四)

    231. Power of Two 232. Implement Queue using Stacks 题目中要求...

  • Leetcode-Java(二十五)

    241. Different Ways to Add Parentheses 采用分治算法,分治算法的基本思想是将...

  • Leetcode-Java(二十六)

    257. Binary Tree Paths 类似于分治法吧。 258. Add Digits 小trick 26...

网友评论

    本文标题:Leetcode-Java(二十七)

    本文链接:https://www.haomeiwen.com/subject/hapfyftx.html