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;
}
}
用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];
}
}