做微信商城网站建设,德阳市建设局网站,做中介最好用的网站,百色做网站36. 有效的数独
class Solution {// 方法 isValidSudoku 接收一个字符二维数组 board#xff0c;表示数独棋盘#xff0c;返回是否有效public boolean isValidSudoku(char[][] board) {// 创建三个二维数组来记录每一行、列和子框中数字的出现次数int[][] rows new int[9][…36. 有效的数独
class Solution {// 方法 isValidSudoku 接收一个字符二维数组 board表示数独棋盘返回是否有效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 ! .) {// 计算当前数字的索引1-9 映射到 0-8 如果重复相同的数映射到同一个位置会不断1如果重复就会大于1int index c - 0 - 1; // 在行、列和子框中更新当前数字的出现次数rows[i][index]; // 增加行的计数columns[j][index]; // 增加列的计数subboxes[i / 3][j / 3][index]; // 增加子框的计数// 如果某个位置的计数超过 1说明出现重复返回 falseif (rows[i][index] 1 || columns[j][index] 1 || subboxes[i / 3][j / 3][index] 1) {return false; // 数独无效}}}}// 如果循环结束说明没有发现重复返回 truereturn true; // 数独有效}
}
54. 螺旋矩阵
class Solution {// // 方法 spiralOrder 接收一个二维整数数组 matrix返回矩阵的螺旋顺序遍历结果public ListInteger spiralOrder(int[][] matrix) {// 获取矩阵的行数int m matrix.length;// 获取矩阵的列数int n matrix[0].length;// 定义四个边界// 上边界int up 0;// 左边界int left 0;// 右边界int right n - 1;// 下边界int down m - 1;// 存储结果的列表ListInteger result new ArrayList();// 使用循环遍历直到所有元素都被访问while(true) {// 从左到右遍历上边界for (int i left; i right; i) {// 添加当前元素到结果列表中result.add(matrix[up][i]);}// 更新上边界检查是否已超出下边界if (up down) {// 如果上边界超过下边界结束循环break;}// 从上到下遍历右边界for (int i up; i down; i) {result.add(matrix[i][right]); // 添加当前元素到结果列表中}// 更新右边界检查是否已超出左边界if (--right left) {break; // 如果右边界超过左边界结束循环}// 从右到左遍历下边界for (int i right; i left; i--) {result.add(matrix[down][i]); // 添加当前元素到结果列表中}// 更新下边界检查是否已超出上边界if (--down up) {break; // 如果下边界超过上边界结束循环}// 从下到上遍历左边界for (int i down; i up; i--) {result.add(matrix[i][left]); // 添加当前元素到结果列表中}// 更新左边界检查是否已超出右边界if (left right) {break; // 如果左边界超过右边界结束循环}}// 返回螺旋顺序遍历的结果return result;}}
48. 旋转图像
class Solution {// 方法 rotate 接收一个二维整数数组 matrix表示要旋转的矩阵public void rotate(int[][] matrix) {// 获取矩阵的行数 mint m matrix.length;// 获取矩阵的列数 nint n matrix[0].length;// 创建一个临时矩阵用于存储原矩阵的值int[][] temp new int[m][];for (int i 0; i m; i) {// 深拷贝原矩阵的每一行以防旋转时修改原矩阵的值temp[i] matrix[i].clone(); // 使用 clone() 方法进行深拷贝}// 遍历临时矩阵将值重新赋值到原矩阵中的适当位置完成顺时针旋转for (int i 0; i m; i) {for (int j 0; j n; j) {// 根据旋转公式把 temp[i][j] 放到 matrix[j][n - 1 - i]matrix[j][n - 1 - i] temp[i][j];}}}}
73. 矩阵置零
class Solution {// 方法 setZeroes 接收一个二维整数数组 matrix表示要处理的矩阵public void setZeroes(int[][] matrix) {int m matrix.length; // 获取矩阵的行数int n matrix[0].length; // 获取矩阵的列数// 创建两个标记数组用于记录需要置零的行和列boolean[] row new boolean[m]; // 行标记位boolean[] col new boolean[n]; // 列标记位// 第一次遍历整个矩阵查找值为 0 的元素for (int i 0; i m; i) {for (int j 0; j n; j) {if (matrix[i][j] 0) { // 如果当前元素为 0row[i] true; // 将对应的行标记为 truecol[j] true; // 将对应的列标记为 true}}}// 第二次遍历根据标记修改矩阵中的元素for (int i 0; i m; i) {for (int j 0; j n; j) {// 如果该行或该列需要置为 0则将当前元素设置为 0if (row[i] || col[j]) {matrix[i][j] 0; // 设置当前元素为 0}}}}
}
289. 生命游戏
class Solution {// 方法 gameOfLife 接收一个二维整数数组 board表示细胞的当前状态public void gameOfLife(int[][] board) {// 创建一个数组来表示邻居的位置变化邻居可以在横向、纵向和对角线int[] neighbors {0, 1, -1}; int rows board.length; // 获取行数int cols board[0].length; // 获取列数// 创建一个复制数组 copyBoard用于存储当前状态int[][] copyBoard new int[rows][cols];// 从原数组复制一份到 copyBoard 中for (int row 0; row rows; row) {for (int col 0; col cols; col) {copyBoard[row][col] board[row][col]; // 深拷贝细胞状态}}// 遍历面板中的每一个细胞for (int row 0; row rows; row) {for (int col 0; col cols; col) {// 统计当前细胞八个相邻细胞中的活细胞数量int liveNeighbors 0;// 检查当前细胞的所有邻居for (int i 0; i 3; i) { // 遍历邻居的行偏移for (int j 0; j 3; j) { // 遍历邻居的列偏移// 排除当前细胞自身if (!(neighbors[i] 0 neighbors[j] 0)) {int r (row neighbors[i]); // 计算邻居的行坐标int c (col neighbors[j]); // 计算邻居的列坐标// 检查邻居是否在矩阵内并且是活细胞if ((r rows r 0) (c cols c 0) (copyBoard[r][c] 1)) {liveNeighbors 1; // 统计活细胞数量}}}}// 应用生命游戏规则// 规则 1 或 规则 3活细胞与少于 2 个或多于 3 个活邻居则死亡if ((copyBoard[row][col] 1) (liveNeighbors 2 || liveNeighbors 3)) {board[row][col] 0; // 死亡}// 规则 4死细胞有正好 3 个活邻居则复活if (copyBoard[row][col] 0 liveNeighbors 3) {board[row][col] 1; // 复活}}}}
}