豆包MarsCode AI 刷题-----392.小F的矩阵值调整
问题描述
小F得到了一个矩阵。如果矩阵中某一个格子的值是偶数,则该值变为它的三倍;如果是奇数,则保持不变。小F想知道调整后的矩阵是什么样子的。
测试样例
样例1:
输入:
a = [[1, 2, 3], [4, 5, 6]]
输出:[[1, 6, 3], [12, 5, 18]]
样例2:
输入:
a = [[7, 8, 9], [10, 11, 12]]
输出:[[7, 24, 9], [30, 11, 36]]
样例3:
输入:
a = [[2, 4], [6, 8]]
输出:[[6, 12], [18, 24]]
一、思路分析
本题要求根据给定的规则对矩阵中的元素进行调整。规则是:若矩阵中某一格子的值为偶数,则将其变为原来的三倍;若为奇数,则保持不变。
整体的解题思路较为直观,即遍历矩阵中的每一个元素,判断其奇偶性,然后按照相应规则进行处理。由于矩阵是二维结构,所以需要使用嵌套的循环来遍历行和列,以访问到每一个元素。
二、图解
为了更好地理解这个过程,我们以样例 1 中的矩阵 a = [[1, 2, 3], [4, 5, 6]] 为例进行图解。
初始矩阵:
| 列 0 | 列 1 | 列 2 | |
|---|---|---|---|
| 行 0 | 1 | 2 | 3 |
| 行 1 | 4 | 5 | 6 |
在遍历过程中:
-
对于元素
a[0][0] = 1,它是奇数,根据规则保持不变。 -
对于元素
a[0][1] = 2,它是偶数,变为2 * 3 = 6。 -
对于元素
a[0][2] = 3,它是奇数,保持不变。 -
对于元素
a[1][0] = 4,它是偶数,变为4 * 3 = 12。 -
对于元素
a[1][1] = 5,它是奇数,保持不变。 -
对于元素
a[1][2] = 6,它是偶数,变为6 * 3 = 18。
最终得到的调整后矩阵:
| 列 0 | 列 1 | 列 2 | |
|---|---|---|---|
| 行 0 | 1 | 6 | 3 |
| 行 1 | 12 | 5 | 18 |
三、代码详解
以下是实现矩阵元素调整功能的 Java 代码:
import java.util.Arrays;
public class Main {
public static int[][] solution(int[][] a) {
// 获取矩阵的行数
int rows = a.length;
// 获取矩阵的列数
int cols = a[0].length;
// 创建一个新的矩阵,用于存储调整后的结果
int[][] result = new int[rows][cols];
// 外层循环遍历矩阵的行
for (int i = 0; i < rows; i++) {
// 内层循环遍历矩阵的列
for (int j = 0; j < cols; j++) {
// 判断当前元素的奇偶性
if (a[i][j] % 2 == 0) {
// 如果是偶数,将其在结果矩阵中的对应位置设置为原元素的三倍
result[i][j] = a[i][j] * 3;
} else {
// 如果是奇数,将其在结果矩阵中的对应位置设置为原元素
result[i][j] = a[i][j];
}
}
}
return result;
}
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}}));
}
}
在 solution 方法中:
1. 确定矩阵的行数和列数
int rows = a.length;
int cols = a[0].length;
首先,通过 a.length 可以获取矩阵 a 的行数,这表示矩阵有多少行数据。而 a[0].length 则获取矩阵第一行的列数,由于矩阵的列数是固定的,所以通过第一行的列数就可以确定整个矩阵的列数。这两个值将用于后续的循环遍历。
2. 创建结果矩阵
java
复制
int[][] result = new int[rows][cols];
创建一个与输入矩阵 a 具有相同行数和列数的新矩阵 result。这个矩阵将用于存储根据规则调整后的元素值。
3. 遍历输入矩阵并调整元素值
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (a[i][j] % 2 == 0) {
result[i][j] = a[i][j] * 3;
} else {
result[i][j] = a[i][j];
}
}
}
这里使用了两层嵌套的 for 循环。外层循环 for (int i = 0; i < rows; i++) 用于遍历矩阵的每一行,内层循环 for (int j = 0; j < cols; j++) 则在每一行中遍历每一列。这样就可以访问到矩阵中的每一个元素 a[i][j]。
对于每一个元素 a[i][j],通过 if (a[i][j] % 2 == 0) 判断其是否为偶数。如果是偶数,就将其在结果矩阵 result 中的对应位置 result[i][j] 设置为原元素 a[i][j] 的三倍;如果是奇数,则将结果矩阵中的对应位置设置为原元素本身。
4. 返回结果矩阵
return result;
最后,将调整好的结果矩阵 result 返回。在 main 方法中,通过 Arrays.deepEquals 方法比较 solution 方法返回的结果矩阵与预期的结果矩阵是否相等,以此来验证代码的正确性。如果相等,则输出 1 表示通过验证;否则输出 0 表示未通过验证。