392.小F的矩阵值调整

89 阅读4分钟

豆包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
行 0123
行 1456

在遍历过程中:

  • 对于元素 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
行 0163
行 112518

三、代码详解

以下是实现矩阵元素调整功能的 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 表示未通过验证。