问题描述
小F得到了一个矩阵。如果矩阵中某一个格子的值是偶数,则该值变为它的三倍;如果是奇数,则保持不变。小F想知道调整后的矩阵是什么样子的。
问题分析
本问题要求对矩阵中的每个元素进行判断和修改,根据元素值的奇偶性调整其值。关键在于遍历整个矩阵,并通过条件判断有效地对偶数元素进行三倍处理,而奇数元素保持不变。
实现思路
-
矩阵的遍历:
使用两层循环访问矩阵的每一行和每一列。- 外层循环控制矩阵的行,范围是
0到rows-1(行数)。 - 内层循环控制矩阵的列,范围是
0到cols-1(列数)。
- 外层循环控制矩阵的行,范围是
-
判断偶数与修改值:
使用if条件判断当前元素是否为偶数。若为偶数,使用a[i][j] *= 3将当前值乘以 3。 -
处理结果:
原地修改矩阵后,返回修改后的矩阵。 -
返回结果:返回修改后的矩阵以完成任务。
代码实现
java
复制代码
import java.util.Arrays;
public class Main {
public static int[][] solution(int[][] a) {
int rows = a.length;
int cols = a[0].length;
// 遍历矩阵并修改值
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (a[i][j] % 2 == 0) { // 判断是否为偶数
a[i][j] *= 3;
}
}
}
return a; // 返回修改后的矩阵
}
public static void main(String[] args) {
System.out.println(Arrays.deepEquals(solution(new int[][]{{1, 2, 3}, {4, 5, 6}}), new int[][]{{1, 6, 3}, {12, 5, 18}}));
System.out.println(Arrays.deepEquals(solution(new int[][]{{7, 8, 9}, {10, 11, 12}}), new int[][]{{7, 24, 9}, {30, 11, 36}}));
System.out.println(Arrays.deepEquals(solution(new int[][]{{2, 4}, {6, 8}}), new int[][]{{6, 12}, {18, 24}}));
}
}
代码解析
-
矩阵初始化:
- 矩阵是二维数组,
int[][]表示整型二维数组。 - 示例矩阵
{{1, 2, 3}, {4, 5, 6}}表示有两行三列,元素按行排列。
- 矩阵是二维数组,
-
获取矩阵的维度:
matrix.length:获取行数,即矩阵有多少行。matrix[0].length:获取列数,即每一行有多少列。
-
双层循环遍历矩阵:
for (int i = 0; i < rows; i++)遍历每一行。for (int j = 0; j < cols; j++)遍历每一列。- 每次循环中,通过
matrix[i][j]访问矩阵的当前元素。
-
判断偶数:
- 使用
if (matrix[i][j] % 2 == 0)检查当前值是否为偶数。 - 如果为偶数,使用
matrix[i][j] *= 3将值变为三倍。
- 使用
-
输出矩阵:
- 使用
Arrays.deepToString(matrix)打印二维数组,便于观察结果。
- 使用
复杂度分析
-
时间复杂度:O(n × m)
- 遍历整个矩阵需要访问每个元素一次,其中
n为矩阵行数,m为列数。
- 遍历整个矩阵需要访问每个元素一次,其中
-
空间复杂度:O(1)
- 使用原地修改方法,没有额外空间需求,空间复杂度最优。
总结
本题的解决方案使用了简单明了的矩阵遍历和条件判断逻辑,能够高效处理矩阵中的每个元素并根据规则进行修改。代码不仅结构清晰、易于理解,还在时间和空间复杂度上都达到了较优水平。