auto commit

This commit is contained in:
CyC2018 2018-03-19 11:18:08 +08:00
parent 44cbd10f72
commit f678e6e7fb

View File

@ -624,26 +624,33 @@ private char[][] buildMatrix(char[] array) {
```java ```java
private int cnt = 0; private int cnt = 0;
private int[][] next = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}}; private int[][] next = {{0, -1}, {0, 1}, {-1, 0}, {1, 0}};
private int rows;
private int cols;
private int threshold;
private int[][] digitSum; private int[][] digitSum;
public int movingCount(int threshold, int rows, int cols) { public int movingCount(int threshold, int rows, int cols) {
initDigitSum(rows, cols); this.rows = rows;
dfs(new boolean[rows][cols], threshold, rows, cols, 0, 0); this.cols = cols;
this.threshold = threshold;
initDigitSum();
boolean[][] hasVisited = new boolean[rows][cols];
dfs(hasVisited, 0, 0);
return cnt; return cnt;
} }
private void dfs(boolean[][] visited, int threshold, int rows, int cols, int r, int c) { private void dfs(boolean[][] hasVisited, int r, int c) {
if (r < 0 || r >= rows || c < 0 || c >= cols) return; if (r < 0 || r >= this.rows || c < 0 || c >= this.cols) return;
if (visited[r][c]) return; if (hasVisited[r][c]) return;
visited[r][c] = true; hasVisited[r][c] = true;
if (this.digitSum[r][c] > threshold) return; if (this.digitSum[r][c] > this.threshold) return;
this.cnt++; this.cnt++;
for (int i = 0; i < this.next.length; i++) { for (int i = 0; i < this.next.length; i++) {
dfs(visited, threshold, rows, cols, r + next[i][0], c + next[i][1]); dfs(hasVisited, r + next[i][0], c + next[i][1]);
} }
} }
private void initDigitSum(int rows, int cols) { private void initDigitSum() {
int[] digitSumOne = new int[Math.max(rows, cols)]; int[] digitSumOne = new int[Math.max(rows, cols)];
for (int i = 0; i < digitSumOne.length; i++) { for (int i = 0; i < digitSumOne.length; i++) {
int n = i; int n = i;
@ -653,8 +660,8 @@ private void initDigitSum(int rows, int cols) {
} }
} }
this.digitSum = new int[rows][cols]; this.digitSum = new int[rows][cols];
for (int i = 0; i < rows; i++) { for (int i = 0; i < this.rows; i++) {
for (int j = 0; j < cols; j++) { for (int j = 0; j < this.cols; j++) {
this.digitSum[i][j] = digitSumOne[i] + digitSumOne[j]; this.digitSum[i][j] = digitSumOne[i] + digitSumOne[j];
} }
} }