AI刷题 392. 小F的矩阵值调整 题解 | 豆包MarsCode AI刷题

74 阅读3分钟

问题描述

小F得到了一个矩阵。如果矩阵中某一个格子的值是偶数,则该值变为它的三倍;如果是奇数,则保持不变。小F想知道调整后的矩阵是什么样子的。

问题分析

本问题要求对矩阵中的每个元素进行判断和修改,根据元素值的奇偶性调整其值。关键在于遍历整个矩阵,并通过条件判断有效地对偶数元素进行三倍处理,而奇数元素保持不变。

实现思路

  • 矩阵的遍历
    使用两层循环访问矩阵的每一行和每一列。

    • 外层循环控制矩阵的行,范围是 0rows-1(行数)。
    • 内层循环控制矩阵的列,范围是 0cols-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)

    • 使用原地修改方法,没有额外空间需求,空间复杂度最优。

总结

本题的解决方案使用了简单明了的矩阵遍历和条件判断逻辑,能够高效处理矩阵中的每个元素并根据规则进行修改。代码不仅结构清晰、易于理解,还在时间和空间复杂度上都达到了较优水平。