[leetCode刷题笔记]2017.04.10

223. Rectangle Area

public class Solution {
    public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
        // bottom left x y
        int blX = Math.max(A, E);
        int blY = Math.max(B, F);
        
        // top right x y
        int trX = Math.min(C, G);
        int trY = Math.min(D, H);
        int overlap = 0;
        if (trX > blX && trY > blY)  overlap = (trX - blX) * (trY - blY);
        return (C-A) * (D-B) + (G-E) * (H-F) - overlap;
    }
}



224. Basic Calculator

用stack来解决

public class Solution {
    public int calculate(String s) {
        int n = s.length();
        int result  = 0;
        int sign = 1;
        Stack<Integer> stack = new Stack<Integer>();
        
        for (int i = 0; i < n; i++) {
            if (Character.isDigit(s.charAt(i))) {
                int sum = s.charAt(i) - '0';
                while (i + 1 < n && Character.isDigit(s.charAt(i + 1))) {
                    sum = sum * 10 + s.charAt(i + 1) - '0';
                    i++;
                    
                }
                result += sum * sign;
            }
            else if (s.charAt(i) == '+') {
                sign = 1;
            }
            else if (s.charAt(i) == '-') {
                sign = -1;
            }
            else if (s.charAt(i) == '(') {
                stack.push(result);
                stack.push(sign);
                result = 0;
                sign = 1;
                
            }
            else if (s.charAt(i) == ')') {
                result = result * stack.pop() + stack.pop();
            }
        }
        return result;
        
    }
}

231. Power of Two

第一种用二进制计算, 如果一个数是2的n次方,那么它的二进制表示只有一个1其他都是0.n - 1就是111111。。。。。

public class Solution {
    public boolean isPowerOfTwo(int n) {
        return ((n & (n-1))==0 && n>0);
    }
}


public class Solution {
    public boolean isPowerOfTwo(int n) {
        if (n < 1) return false;
        while (n%2 == 0) n /= 2;
        return (n == 1);
    }
}

263. Ugly Number

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

264. Ugly Number II

假设有三个数组,:

(1) 1×2, 2×2, 3×2, 4×2, 5×2, …
(2) 1×3, 2×3, 3×3, 4×3, 5×3, …
(3) 1×5, 2×5, 3×5, 4×5, 5×5, …

从里面选出最小的填到ugle[]数组里面。运用了选择排序的思想。

public class Solution {
    public int nthUglyNumber(int n) {
        int[] ugly = new int[n];
        ugly[0] = 1;
        int index2 = 0, index3 = 0, index5 = 0;
        int factor2 = 2, factor3 = 3, factor5 = 5;
        for (int i = 1; i < n; i++) {
            int min = Math.min(factor2, Math.min(factor3, factor5));
            ugly[i] = min;
            if (factor2 == min) factor2 = 2 * ugly[++index2];
            if (factor3 == min) factor3 = 3 * ugly[++index3];
            if (factor5 == min) factor5 = 5 * ugly[++index5];
        }
        return ugly[n - 1];
    }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值