Skip to content

Commit 594c230

Browse files
committed
Signed-off-by: yuduozhou <[email protected]>
1 parent c0724a0 commit 594c230

11 files changed

+223
-0
lines changed

ThreeSum.java 3Sum.java

File renamed without changes.
File renamed without changes.

FourSum.java 4Sum.java

File renamed without changes.
File renamed without changes.

CountAndSay.java

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
public class Solution {
2+
public String countAndSay(int n) {
3+
// Start typing your Java solution below
4+
// DO NOT write main() function
5+
String result = "1";
6+
for (int i = 0; i < n-1; i++) {
7+
result = sayIt(result);
8+
}
9+
return result;
10+
}
11+
12+
public String sayIt(String s) {
13+
StringBuilder buf = new StringBuilder();
14+
int length = s.length();
15+
for (int i = 0; i < length; i++) {
16+
int count = 1;
17+
while (i + 1 < length && s.charAt(i + 1) == s.charAt(i)) {
18+
i++;
19+
count++;
20+
}
21+
buf.append(String.valueOf(count) + String.valueOf(s.charAt(i)));
22+
}
23+
return buf.toString();
24+
}
25+
}

DecodeWays.java

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
public class Solution {
2+
public int numDecodings(String s) {
3+
// Start typing your Java solution below
4+
// DO NOT write main() function
5+
6+
if (s.equals("") || s.charAt(0) == '0'){
7+
return 0;
8+
}
9+
if (s.length() == 1){
10+
return 1;
11+
}
12+
return count(s);
13+
}
14+
15+
public int count(String s){
16+
int len = s.length();
17+
int[] code = new int[len];
18+
int[] dWays = new int[len];
19+
for (int i = 0; i < len; i++){
20+
code[i] = Integer.parseInt(s.substring(i, i + 1));
21+
// Avoid all zeros.
22+
if (code[i] == 0){
23+
if (code[i - 1] != 1 && code[i - 1] != 2){
24+
return 0;
25+
}
26+
}
27+
}
28+
dWays[0] = (code[1] == 0)? 0 : 1;
29+
int temp = code[0] * 10 + code[1];
30+
dWays[1] = ( temp > 26 || temp % 10 == 0) ? 1 : 2;
31+
32+
for (int i = 2; i < len; i++){
33+
int number = code[i - 1] * 10 + code[i];
34+
if (number % 10 == 0){
35+
dWays[i] = dWays[i - 2];
36+
}
37+
else if (number <= 26 && number > 10){
38+
dWays[i] = dWays[i - 1] + dWays[i - 2];
39+
}
40+
else{
41+
dWays[i] = dWays[i - 1];
42+
}
43+
}
44+
return dWays[len - 1];
45+
}
46+
}

DivideTwoInteger.java

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
public class Solution {
2+
public int divide(int dividend, int divisor) {
3+
// Start typing your Java solution below
4+
// DO NOT write main() function
5+
6+
int a = Math.abs(dividend);
7+
int b = Math.abs(divisor);
8+
boolean neg = (dividend > 0 && divisor < 0) || (dividend < 0 && divisor > 0);
9+
if (divisor == 0) {
10+
return Integer.MAX_VALUE;
11+
}
12+
if (divisor == Integer.MIN_VALUE) {
13+
return (dividend == Integer.MIN_VALUE) ? 1 : 0;
14+
}
15+
if (dividend == Integer.MIN_VALUE) {
16+
if (neg) {
17+
return -1 + divide(dividend + b, b);
18+
}
19+
else {
20+
return 1 - divide(dividend + b, b);
21+
}
22+
}
23+
int product = b, result = 0;
24+
while (a >= b) {
25+
int q = 1;
26+
while (a - product >= product) {
27+
q = q << 1;
28+
product = product << 1;
29+
}
30+
a = a - product;
31+
product = b;
32+
result += q;
33+
}
34+
return (neg) ? -result : result;
35+
}
36+
}

EditDistance.java

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
public class Solution {
2+
public int minDistance(String word1, String word2) {
3+
// Start typing your Java solution below
4+
// DO NOT write main() function
5+
6+
if (word1.equals(word2)) return 0;
7+
int len1 = word1.length(), len2 = word2.length();
8+
if (len1 == 0) return len2;
9+
if (len2 == 0) return len1;
10+
11+
int[][] dist = new int[len1 + 1][len2 + 1];
12+
dist[0][0] = 0;
13+
for (int i = 1; i <= len1; i ++){
14+
dist[i][0] = i;
15+
}
16+
for (int j = 1; j <= len2; j ++){
17+
dist[0][j] = j;
18+
}
19+
for (int i = 1; i <= len1; i ++){
20+
for (int j = 1; j <= len2; j ++){
21+
dist[i][j] = findMin(
22+
dist[i - 1][j] + 1, dist[i][j - 1] + 1,
23+
dist[i - 1][j - 1] + (word1.charAt(i - 1) == word2.charAt(j - 1) ? 0 : 1));
24+
}
25+
}
26+
return dist[len1][len2];
27+
}
28+
29+
public int findMin(int ... num){
30+
int min = num[0];
31+
for (int i = 1; i < num.length; i ++){
32+
if (num[i] < min){
33+
min = num[i];
34+
}
35+
}
36+
return min;
37+
}
38+
}

FirstMissingPositive.java

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
public class Solution {
2+
public int firstMissingPositive(int[] A) {
3+
// Start typing your Java solution below
4+
// DO NOT write main() function
5+
if (A.length < 1) return 1;
6+
int i = 0;
7+
for (i = 0; i < A.length; i++){
8+
while (A[i] > 0 && A[i] <= A.length && A[i] != i + 1 && A[A[i] - 1] != A[i]){
9+
int temp = A[i];
10+
A[i] = A[temp - 1];
11+
A[temp - 1] = temp;
12+
}
13+
}
14+
15+
for (i = 0; i < A.length; i++){
16+
if (A[i] != i + 1)
17+
return i + 1;
18+
}
19+
return i + 1;
20+
}
21+
}

GenerateParentheses.java

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
public class Solution {
2+
public ArrayList<String> generateParenthesis(int n) {
3+
// Start typing your Java solution below
4+
// DO NOT write main() function
5+
6+
ArrayList<String> result = new ArrayList<String>();
7+
char[] parens = new char[n+n];
8+
gp (result, 0, 0, n, parens);
9+
return result;
10+
}
11+
12+
public void gp(ArrayList<String> result, int left, int right, int n, char[] parens) {
13+
if (left == right && left == n) {
14+
result.add(new String(parens));
15+
return;
16+
}
17+
18+
if (left < n) {
19+
parens[left + right] = '(';
20+
gp(result, left + 1, right, n, parens);
21+
}
22+
23+
if (right < left) {
24+
parens[left + right] = ')';
25+
gp(result, left, right + 1, n, parens);
26+
}
27+
}
28+
}

GrayCode.java

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
public class Solution {
2+
public ArrayList<Integer> grayCode(int n) {
3+
// Start typing your Java solution below
4+
// DO NOT write main() function
5+
ArrayList<Integer> result = new ArrayList<Integer>();
6+
if (n <= 1) {
7+
for (int i = 0; i <= n; i++){
8+
result.add(i);
9+
}
10+
return result;
11+
}
12+
result = grayCode(n - 1);
13+
ArrayList<Integer> r1 = reverse(result);
14+
int x = 1 << (n-1);
15+
for (int i = 0; i < r1.size(); i++) {
16+
r1.set(i, r1.get(i) + x);
17+
}
18+
result.addAll(r1);
19+
return result;
20+
}
21+
22+
public ArrayList<Integer> reverse (ArrayList<Integer> r) {
23+
ArrayList<Integer> rev = new ArrayList<Integer>();
24+
for (int i = r.size() - 1; i >= 0; i--) {
25+
rev.add(r.get(i));
26+
}
27+
return rev;
28+
}
29+
}

0 commit comments

Comments
 (0)