Skip to content

Commit dd046ed

Browse files
committed
modify code
1 parent 2804775 commit dd046ed

File tree

1 file changed

+18
-29
lines changed

1 file changed

+18
-29
lines changed

src/class47/Code02_RestoreWays.java

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -90,10 +90,6 @@ public static int process1(int[] arr, int i, int v, int s) {
9090
public static int ways2(int[] arr) {
9191
int N = arr.length;
9292
int[][][] dp = new int[N][201][3];
93-
// dp[0][...][...]
94-
// dp[0][...][2] = 0
95-
// dp[0][...][0] = 1
96-
// dp[0][...][1] = 1
9793
if (arr[0] != 0) {
9894
dp[0][arr[0]][0] = 1;
9995
dp[0][arr[0]][1] = 1;
@@ -108,14 +104,14 @@ public static int ways2(int[] arr) {
108104
for (int s = 0; s < 3; s++) {
109105
if (arr[i] == 0 || v == arr[i]) {
110106
if (s == 0 || s == 1) {
111-
for (int pre = 1; pre < 201; pre++) {
112-
dp[i][v][s] += dp[i - 1][pre][pre < v ? 0 : (pre == v ? 1 : 2)];
113-
}
114-
} else {
115-
for (int pre = v; pre < 201; pre++) {
116-
dp[i][v][s] += dp[i - 1][pre][pre < v ? 0 : (pre == v ? 1 : 2)];
107+
for (int pre = 1; pre < v; pre++) {
108+
dp[i][v][s] += dp[i - 1][pre][0];
117109
}
118110
}
111+
dp[i][v][s] += dp[i - 1][v][1];
112+
for (int pre = v + 1; pre < 201; pre++) {
113+
dp[i][v][s] += dp[i - 1][pre][2];
114+
}
119115
}
120116
}
121117
}
@@ -143,11 +139,7 @@ public static int ways3(int[] arr) {
143139
dp[0][v][1] = 1;
144140
}
145141
}
146-
// presum[0~V][0] -> sum0[]
147-
// presum[0~V][1] -> sum1[]
148-
// presum[0~V][2] -> sum2[]
149142
int[][] presum = new int[201][3];
150-
// presum -> dp[0][..][..] 三张表
151143
for (int v = 1; v < 201; v++) {
152144
for (int s = 0; s < 3; s++) {
153145
presum[v][s] = presum[v - 1][s] + dp[0][v][s];
@@ -158,14 +150,10 @@ public static int ways3(int[] arr) {
158150
for (int s = 0; s < 3; s++) {
159151
if (arr[i] == 0 || v == arr[i]) {
160152
if (s == 0 || s == 1) {
161-
// dp[i][..][..] -> dp[i-1][..][..]
162153
dp[i][v][s] += sum(1, v - 1, 0, presum);
163-
dp[i][v][s] += dp[i - 1][v][1];
164-
dp[i][v][s] += sum(v + 1, 200, 2, presum);
165-
} else {
166-
dp[i][v][s] += dp[i - 1][v][1];
167-
dp[i][v][s] += sum(v + 1, 200, 2, presum);
168154
}
155+
dp[i][v][s] += dp[i - 1][v][1];
156+
dp[i][v][s] += sum(v + 1, 200, 2, presum);
169157
}
170158
}
171159
}
@@ -188,7 +176,7 @@ public static int sum(int begin, int end, int relation, int[][] presum) {
188176

189177
// for test
190178
public static int[] generateRandomArray(int len) {
191-
int[] ans = new int[(int) (Math.random() * len) + 2];
179+
int[] ans = new int[len];
192180
for (int i = 0; i < ans.length; i++) {
193181
if (Math.random() < 0.5) {
194182
ans[i] = 0;
@@ -209,11 +197,12 @@ public static void printArray(int[] arr) {
209197
}
210198

211199
public static void main(String[] args) {
212-
int len = 3;
213-
int testTime = 10;
214-
System.out.println("test begin");
200+
int len = 4;
201+
int testTime = 15;
202+
System.out.println("功能测试开始");
215203
for (int i = 0; i < testTime; i++) {
216-
int[] arr = generateRandomArray(len);
204+
int N = (int) (Math.random() * len) + 2;
205+
int[] arr = generateRandomArray(N);
217206
int ans0 = ways0(arr);
218207
int ans1 = ways1(arr);
219208
int ans2 = ways2(arr);
@@ -222,14 +211,14 @@ public static void main(String[] args) {
222211
System.out.println("Oops!");
223212
}
224213
}
225-
System.out.println("test finish");
226-
int[] arr = generateRandomArray(100000);
227-
System.out.println(arr.length);
214+
System.out.println("功能测试结束");
215+
System.out.println("===========");
216+
int N = 100000;
217+
int[] arr = generateRandomArray(N);
228218
long begin = System.currentTimeMillis();
229219
ways3(arr);
230220
long end = System.currentTimeMillis();
231221
System.out.println("run time : " + (end - begin) + " ms");
232-
233222
}
234223

235224
}

0 commit comments

Comments
 (0)