Skip to content

Commit 57bde1b

Browse files
author
ChienkuChen
committed
Add questions
1 parent c834c98 commit 57bde1b

28 files changed

+893
-325
lines changed

src/_127/127.word-ladder.java

Lines changed: 39 additions & 45 deletions
Large diffs are not rendered by default.

src/_127/127.word-ladder.java.bak

Lines changed: 67 additions & 0 deletions
Large diffs are not rendered by default.

src/_130/130.surrounded-regions.java

Lines changed: 23 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,49 @@
11
package _130;
22

3-
import java.util.Arrays;
4-
53
class Solution {
64
public void solve(char[][] board) {
7-
if (board.length == 0)
8-
return;
9-
105
int m = board.length;
6+
if (m == 0) return;
117
int n = board[0].length;
128

139
for (int i = 0; i < m; i++) {
14-
mark(board, i, 0);
15-
mark(board, i, n - 1);
10+
if (board[i][0] == 'O')
11+
fill(board, m, n, i, 0);
12+
13+
if (board[i][n - 1] == 'O')
14+
fill(board, m, n, i, n - 1);
1615
}
1716

18-
for (int i = 0; i < n; i++) {
19-
mark(board, 0, i);
20-
mark(board, m - 1, i);
17+
for (int i = 1; i < n - 1; i++) {
18+
if (board[0][i] == 'O')
19+
fill(board, m, n, 0, i);
20+
21+
if (board[m - 1][i] == 'O')
22+
fill(board, m, n, m - 1, i);
2123
}
2224

2325
for (int i = 0; i < m; i++) {
2426
for (int j = 0; j < n; j++) {
2527
if (board[i][j] == 'O')
2628
board[i][j] = 'X';
27-
}
28-
}
29-
30-
for (int i = 0; i < m; i++) {
31-
for (int j = 0; j < n; j++) {
32-
if (board[i][j] == '#')
29+
else if (board[i][j] == '*')
3330
board[i][j] = 'O';
3431
}
3532
}
36-
}
37-
38-
private void mark(char[][] board, int i, int j) {
39-
if (i < 0 || i >= board.length || j < 0 || j >= board[0].length)
40-
return;
41-
42-
if (board[i][j] == 'O')
43-
board[i][j] = '#';
44-
else
45-
return;
4633

47-
mark(board, i - 1, j);
48-
mark(board, i + 1, j);
49-
mark(board, i, j - 1);
50-
mark(board, i, j + 1);
5134
}
5235

53-
public static void main(String[] args) {
54-
char[][] board = new char[][]{
55-
new char[]{'X', 'X', 'X', 'X'},
56-
new char[]{'X', 'O', 'O', 'X'},
57-
new char[]{'X', 'X', 'O', 'X'},
58-
new char[]{'X', 'O', 'X', 'X'}
59-
};
60-
61-
new Solution().solve(board);
62-
System.out.println(Arrays.deepToString(board));
63-
64-
board = new char[][]{
65-
new char[]{'X', 'X', 'X', 'X'},
66-
new char[]{'X', 'O', 'O', 'X'},
67-
new char[]{'X', 'X', 'O', 'X'},
68-
new char[]{'X', 'O', 'O', 'X'}
69-
};
70-
71-
new Solution().solve(board);
72-
System.out.println(Arrays.deepToString(board));
36+
private void fill(char[][] board, int m, int n, int i, int j) {
37+
if (i < 0 || i >= m || j < 0 || j >= n)
38+
return;
7339

74-
board = new char[][]{
75-
new char[]{'O', 'O'},
76-
new char[]{'O', 'O'}
77-
};
40+
if (board[i][j] == 'O') {
41+
board[i][j] = '*';
7842

79-
new Solution().solve(board);
80-
System.out.println(Arrays.deepToString(board));
43+
fill(board, m, n, i + 1, j);
44+
fill(board, m, n, i - 1, j);
45+
fill(board, m, n, i, j + 1);
46+
fill(board, m, n, i, j - 1);
47+
}
8148
}
8249
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package _130;
2+
3+
import java.util.Arrays;
4+
5+
class Solution {
6+
public void solve(char[][] board) {
7+
if (board.length == 0)
8+
return;
9+
10+
int m = board.length;
11+
int n = board[0].length;
12+
13+
for (int i = 0; i < m; i++) {
14+
mark(board, i, 0);
15+
mark(board, i, n - 1);
16+
}
17+
18+
for (int i = 0; i < n; i++) {
19+
mark(board, 0, i);
20+
mark(board, m - 1, i);
21+
}
22+
23+
for (int i = 0; i < m; i++) {
24+
for (int j = 0; j < n; j++) {
25+
if (board[i][j] == 'O')
26+
board[i][j] = 'X';
27+
}
28+
}
29+
30+
for (int i = 0; i < m; i++) {
31+
for (int j = 0; j < n; j++) {
32+
if (board[i][j] == '#')
33+
board[i][j] = 'O';
34+
}
35+
}
36+
}
37+
38+
private void mark(char[][] board, int i, int j) {
39+
if (i < 0 || i >= board.length || j < 0 || j >= board[0].length)
40+
return;
41+
42+
if (board[i][j] == 'O')
43+
board[i][j] = '#';
44+
else
45+
return;
46+
47+
mark(board, i - 1, j);
48+
mark(board, i + 1, j);
49+
mark(board, i, j - 1);
50+
mark(board, i, j + 1);
51+
}
52+
53+
public static void main(String[] args) {
54+
char[][] board = new char[][]{
55+
new char[]{'X', 'X', 'X', 'X'},
56+
new char[]{'X', 'O', 'O', 'X'},
57+
new char[]{'X', 'X', 'O', 'X'},
58+
new char[]{'X', 'O', 'X', 'X'}
59+
};
60+
61+
new Solution().solve(board);
62+
System.out.println(Arrays.deepToString(board));
63+
64+
board = new char[][]{
65+
new char[]{'X', 'X', 'X', 'X'},
66+
new char[]{'X', 'O', 'O', 'X'},
67+
new char[]{'X', 'X', 'O', 'X'},
68+
new char[]{'X', 'O', 'O', 'X'}
69+
};
70+
71+
new Solution().solve(board);
72+
System.out.println(Arrays.deepToString(board));
73+
74+
board = new char[][]{
75+
new char[]{'O', 'O'},
76+
new char[]{'O', 'O'}
77+
};
78+
79+
new Solution().solve(board);
80+
System.out.println(Arrays.deepToString(board));
81+
}
82+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package _138;
2+
3+
import datastructure.RandomListNode;
4+
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
8+
/**
9+
* Definition for singly-linked list with a random pointer.
10+
* class RandomListNode {
11+
* int label;
12+
* RandomListNode next, random;
13+
* RandomListNode(int x) { this.label = x; }
14+
* };
15+
*/
16+
17+
class Solution {
18+
public RandomListNode copyRandomList(RandomListNode head) {
19+
if (head == null)
20+
return null;
21+
22+
Map<RandomListNode, RandomListNode> map = new HashMap<>();
23+
RandomListNode tmp = head;
24+
while (tmp != null) {
25+
map.put(tmp, new RandomListNode(tmp.label));
26+
tmp = tmp.next;
27+
}
28+
29+
tmp = head;
30+
while (tmp != null) {
31+
if (tmp.next != null)
32+
map.get(tmp).next = map.get(tmp.next);
33+
34+
if (tmp.random != null)
35+
map.get(tmp).random = map.get(tmp.random);
36+
37+
tmp = tmp.next;
38+
}
39+
40+
return map.get(head);
41+
}
42+
}

src/_163/Solution.java

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,34 +6,45 @@
66
// an easy question, but the description is not clear. I need to handle a lot of overflow cases
77
class Solution {
88
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
9-
List<String> list = new ArrayList<>();
10-
long lowerL = (long) lower;
11-
long upperL = (long) upper;
9+
long lowerl = Long.valueOf(lower);
10+
long upperl = Long.valueOf(upper);
11+
12+
List<String> result = new ArrayList<>();
1213

1314
if (nums.length == 0) {
14-
addString(list, lowerL - 1, upperL + 1);
15+
result.add(getString(lowerl - 1, upperl + 1));
1516
}
1617

1718
for (int i = 0; i < nums.length; i++) {
18-
if (i == 0 && nums[i] != lowerL) {
19-
addString(list, lowerL - 1, nums[i]);
19+
if (i == 0) {
20+
long diff = Long.valueOf(nums[0]) - lowerl;
21+
if (diff >= 1)
22+
result.add(getString(lowerl - 1, nums[0]));
2023
}
21-
if (i - 1 >= 0 && (long) nums[i] - (long) nums[i - 1] > 1) {
22-
addString(list, nums[i - 1], nums[i]);
24+
25+
if (i > 0) {
26+
long diff = Long.valueOf(nums[i]) - Long.valueOf(nums[i - 1]);
27+
if (diff > 1)
28+
result.add(getString(nums[i - 1], nums[i]));
2329
}
24-
if (i == nums.length - 1 && nums[i] != upperL) {
25-
addString(list, nums[i], upperL + 1);
30+
31+
32+
if (i == nums.length - 1) {
33+
long diff = upperl - Long.valueOf(nums[i]);
34+
if (diff >= 1)
35+
result.add(getString(nums[i], upperl + 1));
2636
}
37+
2738
}
2839

29-
return list;
40+
return result;
3041
}
3142

32-
private void addString(List<String> list, long start, long end) {
33-
if (start + 1 == end - 1)
34-
list.add(String.valueOf(start + 1));
35-
else
36-
list.add(String.format("%s->%s", start + 1, end - 1));
43+
private String getString(long s, long e) {
44+
if (s + 1 == e - 1)
45+
return String.valueOf(s + 1);
46+
47+
return String.format("%s->%s", s + 1, e - 1);
3748
}
3849

3950
public static void main(String[] args) {

src/_163/Solution.java.bak1

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package _163;
2+
3+
import java.util.ArrayList;
4+
import java.util.List;
5+
6+
// an easy question, but the description is not clear. I need to handle a lot of overflow cases
7+
class Solution {
8+
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
9+
List<String> list = new ArrayList<>();
10+
long lowerL = (long) lower;
11+
long upperL = (long) upper;
12+
13+
if (nums.length == 0) {
14+
addString(list, lowerL - 1, upperL + 1);
15+
}
16+
17+
for (int i = 0; i < nums.length; i++) {
18+
if (i == 0 && nums[i] != lowerL) {
19+
addString(list, lowerL - 1, nums[i]);
20+
}
21+
if (i - 1 >= 0 && (long) nums[i] - (long) nums[i - 1] > 1) {
22+
addString(list, nums[i - 1], nums[i]);
23+
}
24+
if (i == nums.length - 1 && nums[i] != upperL) {
25+
addString(list, nums[i], upperL + 1);
26+
}
27+
}
28+
29+
return list;
30+
}
31+
32+
private void addString(List<String> list, long start, long end) {
33+
if (start + 1 == end - 1)
34+
list.add(String.valueOf(start + 1));
35+
else
36+
list.add(String.format("%s->%s", start + 1, end - 1));
37+
}
38+
39+
public static void main(String[] args) {
40+
System.out.println(new Solution().findMissingRanges(new int[]{}, -1, 5));
41+
System.out.println(new Solution().findMissingRanges(new int[]{-1}, -1, -1));
42+
System.out.println(new Solution().findMissingRanges(new int[]{-1}, -2, 0));
43+
System.out.println(new Solution().findMissingRanges(new int[]{0, 1, 3, 50, 75}, 0, 99));
44+
System.out.println(new Solution().findMissingRanges(new int[]{-2147483648, 2147483647}, -2147483648, 2147483647));
45+
System.out.println(new Solution().findMissingRanges(new int[]{2147483647}, -2147483648, 2147483647));
46+
}
47+
}
Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,23 @@
11
package _165;
22

3-
// it is a annoying question, although it is not hard.
4-
// before diving into it, you need to understand its version rule.
5-
// the version can be 1.0/1/1.0.0 ..., although they are the same.
6-
// the best way is convert to number and you don't need to handle cumbersome cases.
73
class Solution {
84
public int compareVersion(String version1, String version2) {
9-
String[] split1 = version1.split("\\.");
10-
String[] split2 = version2.split("\\.");
5+
String[] version1Split = version1.split("\\.");
6+
String[] version2Split = version2.split("\\.");
117

12-
double result1 = 0;
13-
int power = 0;
14-
for (int i = 0; i < split1.length; i++) {
15-
result1 += Integer.valueOf(split1[i]) * Math.pow(10, power);
16-
power--;
17-
}
8+
int j = 0;
9+
while (j < version1Split.length || j < version2Split.length) {
10+
int version1Value = (j < version1Split.length) ? Integer.valueOf(version1Split[j]) : 0;
11+
int version2Value = (j < version2Split.length) ? Integer.valueOf(version2Split[j]) : 0;
12+
13+
if (version1Value > version2Value)
14+
return 1;
15+
else if (version1Value < version2Value)
16+
return -1;
1817

19-
double result2 = 0;
20-
power = 0;
21-
for (int i = 0; i < split2.length; i++) {
22-
result2 += Integer.valueOf(split2[i]) * Math.pow(10, power);
23-
power--;
18+
j++;
2419
}
2520

26-
if (result1 > result2)
27-
return 1;
28-
if (result1 < result2)
29-
return -1;
3021
return 0;
3122
}
3223

@@ -38,6 +29,5 @@ public static void main(String[] args) {
3829
System.out.println(new Solution().compareVersion("2.1", "2"));
3930
System.out.println(new Solution().compareVersion("0.9.9.9.9", "1"));
4031
System.out.println(new Solution().compareVersion("1.0.1", "1"));
41-
4232
}
4333
}

0 commit comments

Comments
 (0)