class Solution {
public boolean isValidSudoku(char[][] board) {
int[][] rows = new int[9][9];
int[][] columns = new int[9][9];
int[][][] subboxes = new int[3][3][9];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
char c = board[i][j];
if (c != '.') {
int index = c - '0' - 1;
rows[i][index]++;
columns[j][index]++;
subboxes[i / 3][j / 3][index]++;
if (rows[i][index] > 1 || columns[j][index] > 1 || subboxes[i / 3][j / 3][index] > 1) {
return false;
}
}
}
}
return true;
}
}
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
解法:
1.直接模拟遍历的过程,如果不满足条件则退出。
class Solution {
public List<Integer> spiralOrder(int[][] matrix) {
List<Integer> ans = new ArrayList<>();
if (matrix == null || matrix.length == 0 || matrix[0].length == 0) return ans;
int u = 0, d = matrix.length - 1;
int l = 0, r = matrix[0].length - 1;
while (true) {
for (int i = l; i <= r; i++) { // 左->右
ans.add(matrix[u][i]);
}
if (++u > d) break;
for (int i = u; i <= d; i++) { // 上->下
ans.add(matrix[i][r]);
}
if (--r < l) break;
for (int i = r; i >= l; i--) { // 右->左
ans.add(matrix[d][i]);
}
if (--d < u) break;
for (int i = d; i >= u; i--) { // 下->上
ans.add(matrix[i][l]);
}
if (++l > r) break;
}
return ans;
}
}
class Solution {
public void setZeroes(int[][] matrix) {
int m = matrix.length, n = matrix[0].length;
boolean[] row = new boolean[m];
boolean[] col = new boolean[n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] == 0) {
row[i] = col[j] = true;
}
}
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (row[i] || col[j]) {
matrix[i][j] = 0;
}
}
}
}
}