Skip to content

Commit 0f95483

Browse files
committed
leetcode-73
1 parent 68433ff commit 0f95483

File tree

2 files changed

+135
-0
lines changed

2 files changed

+135
-0
lines changed

src/main/java/medium/lc60.java

+71
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package medium;
2+
3+
import java.util.List;
4+
import java.util.ArrayList;
5+
6+
class lc60 {
7+
public String getPermutation(int n, int k) {
8+
List<Integer> numbers = new ArrayList<>();
9+
for (int i = 1; i <= n; i++) {
10+
numbers.add(Integer.valueOf(i));
11+
}
12+
return getPermutation(numbers, k);
13+
}
14+
15+
private String getPermutation(List<Integer> numbers, int k) {
16+
int size = numbers.size();
17+
if (size == 0) {
18+
return "";
19+
}
20+
if (k == 1) {
21+
return getString(numbers);
22+
}
23+
if (k == count(size)) {
24+
return getReverseString(numbers);
25+
}
26+
while (true) {
27+
int count = count(size - 1);
28+
if (count < k) {
29+
int a = k / count;
30+
int b = k % count;
31+
if (b == 0) {
32+
Integer p = numbers.get(a - 1);
33+
numbers.remove(a - 1);
34+
return String.valueOf(p) + getReverseString(numbers);
35+
} else {
36+
Integer p = numbers.get(a);
37+
numbers.remove(a);
38+
return String.valueOf(p) + getPermutation(numbers, b);
39+
}
40+
} else {
41+
Integer p = numbers.get(0);
42+
numbers.remove(0);
43+
return String.valueOf(p) + getPermutation(numbers, k);
44+
}
45+
}
46+
}
47+
48+
private int count(int n) {
49+
int result = 1;
50+
for (int i = 1; i <= n; i++) {
51+
result *= i;
52+
}
53+
return result;
54+
}
55+
56+
private String getString(List<Integer> numbers) {
57+
StringBuilder sb = new StringBuilder();
58+
for (int i = 0; i < numbers.size(); i++) {
59+
sb.append(numbers.get(i));
60+
}
61+
return sb.toString();
62+
}
63+
64+
private String getReverseString(List<Integer> numbers) {
65+
StringBuilder sb = new StringBuilder();
66+
for (int i = numbers.size() - 1; i >= 0; i--) {
67+
sb.append(numbers.get(i));
68+
}
69+
return sb.toString();
70+
}
71+
}

src/main/java/medium/lc73.java

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
package medium;
2+
3+
class lc73 {
4+
public void setZeros(int[][] matrix) {
5+
int reserveValue = -1024;
6+
for (int i = 0; i < matrix.length; i++) {
7+
for (int j = 0; j < matrix[i].length; j++) {
8+
if (matrix[i][j] != 0 && hasZero(matrix, i, j)) {
9+
matrix[i][j] = reserveValue;
10+
}
11+
}
12+
}
13+
14+
// 另外一种可行的方式
15+
// for (int i = 0; i < matrix.length; i++) {
16+
// for (int j = 0; j < matrix[i].length; j++) {
17+
// if (matrix[i][j] == 0) {
18+
// setZero(matrix, i, j);
19+
// }
20+
// }
21+
// }
22+
23+
for (int i = 0; i < matrix.length; i++) {
24+
for (int j = 0; j < matrix[i].length; j++) {
25+
if (matrix[i][j] == reserveValue) {
26+
matrix[i][j] = 0;
27+
}
28+
}
29+
}
30+
31+
32+
}
33+
34+
// 将matrix中不为0的数字,设置为特征值
35+
private void setZero(int[][] matrix, int i, int j) {
36+
for (int m = 0; m < matrix[i].length; m++) {
37+
if (matrix[i][m] != 0) {
38+
matrix[i][m] = -1024;
39+
}
40+
}
41+
42+
for (int m = 0; m < matrix.length; m++) {
43+
if (matrix[m][j] != 0) {
44+
matrix[m][j] = -1024;
45+
}
46+
}
47+
}
48+
49+
private boolean hasZero(int[][] matrix, int i, int j) {
50+
for (int m = 0; m < matrix[i].length; m++) {
51+
if (matrix[i][m] == 0) {
52+
return true;
53+
}
54+
}
55+
56+
for (int m = 0; m < matrix.length; m++) {
57+
if (matrix[m][j] == 0) {
58+
return true;
59+
}
60+
}
61+
62+
return false;
63+
}
64+
}

0 commit comments

Comments
 (0)