# 题目描述

给你一个下标从 0 开始的二维整数数组 nums 。一开始你的分数为 0 。你需要执行以下操作直到矩阵变为空:

矩阵中每一行选取最大的一个数,并删除它。如果一行中有多个最大的数,选择任意一个并删除。 在步骤 1 删除的所有数字中找到最大的一个数字,将它添加到你的 分数 中。 请你返回最后的 分数 。

提示:

  • 1 <= nums.length <= 300
  • 1 <= nums[i].length <= 500
  • 0 <= nums[i][j] <= 103

# 测试用例

用例1

  • 输入:nums = [[7,2,1],[6,4,2],[6,5,3],[3,2,1]]
  • 输出:15
  • 解释:第一步操作中,我们删除 7 ,6 ,6 和 3 ,将分数增加 7 。下一步操作中,删除 2 ,4 ,5 和 2 ,将分数增加 5 。最后删除 1 ,2 ,3 和 1 ,将分数增加 3 。所以总得分为 7 + 5 + 3 = 15 。

用例2

  • 输入:nums = [[1]]
  • 输出:1
  • 解释:我们删除 1 并将分数增加 1 ,所以返回 1 。

# 思路

先按行排序,然后遍历列,每一列进行比较,拿到每列的最大值,加到最后的ansans 累加得到最终结果

# 代码实现

/**
 * @param {number[][]} nums
 * @return {number}
 */

var __readline = require("readline-sync");
__readline.setDefaultOptions({ prompt: "" });
var readline = __readline.prompt;

console.log("请输入行数: ");
let row = Number(readline());

console.log("请按行输入矩阵: ");
const nums = [];

while (row--) {
  nums.push(readline().split(",").map(Number));
}

console.log("nums: ", nums);
var matrixSum = function (nums) {
  /*
      7 2 1
      6 4 2
      6 5 3
      3 2 1
  */
  // 每次取一行中的最大值
  // 排序?
  // 把数组转为字符串

  for (let num of nums) {
    num.sort((a, b) => b - a);
  }
  // console.log("curNums: ", nums);

  // 每一列取最大值
  let max = -1;
  let ans = 0;
  for (let i = 0; i < nums[0].length; i++) {
    for (let j = 0; j < nums.length; j++) {
      max = Math.max(max, nums[j][i]);
    }
    ans += max;
    max = -1;
    // console.log("ans: ", ans)
  }

  return ans;
};

const ans = matrixSum(nums);
console.log("结果为: ", ans);

/* 
  请输入行数:
  4
  请按行输入矩阵:
  7,2,1
  6,4,2
  6,5,3
  3,2,1
  nums:  [ [ 7, 2, 1 ], [ 6, 4, 2 ], [ 6, 5,
  3 ], [ 3, 2, 1 ] ]
  结果为:  15
*/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67