2639-查询网格图中每一列的宽度

Raphael Liu Lv10

给你一个下标从 0 开始的 m x n 整数矩阵 grid 。矩阵中某一列的宽度是这一列数字的最大 字符串长度

  • 比方说,如果 grid = [[-10], [3], [12]] ,那么唯一一列的宽度是 3 ,因为 -10 的字符串长度为 3

请你返回一个大小为 n 的整数数组 ans ,其中 ans[i] 是第 i 列的宽度。

一个有 len 个数位的整数 x ,如果是非负数,那么 字符串 长度len ,否则为 len + 1

示例 1:

**输入:** grid = [[1],[22],[333]]
**输出:** [3]
**解释:** 第 0 列中,333 字符串长度为 3 。

示例 2:

**输入:** grid = [[-15,1,3],[15,7,12],[5,6,-2]]
**输出:** [3,1,2]
**解释:**
第 0 列中,只有 -15 字符串长度为 3 。
第 1 列中,所有整数的字符串长度都是 1 。
第 2 列中,12 和 -2 的字符串长度都为 2 。

提示:

  • m == grid.length
  • n == grid[i].length
  • 1 <= m, n <= 100
  • -109 <= grid[r][c] <= 109

本题视频讲解

【双周赛 102】

思路

遍历每一列,求出数字的字符串形式的长度的最大值。

[sol1-Python3]
1
2
3
class Solution:
def findColumnWidth(self, grid: List[List[int]]) -> List[int]:
return [max(len(str(x)) for x in col) for col in zip(*grid)]
[sol1-Go]
1
2
3
4
5
6
7
8
9
10
11
func findColumnWidth(grid [][]int) []int {
ans := make([]int, len(grid[0]))
for j := range grid[0] {
for _, row := range grid {
ans[j] = max(ans[j], len(strconv.Itoa(row[j])))
}
}
return ans
}

func max(a, b int) int { if a < b { return b }; return a }

也可以手动计算长度。

[sol2-Python3]
1
2
3
4
5
6
7
8
9
10
11
12
class Solution:
def findColumnWidth(self, grid: List[List[int]]) -> List[int]:
ans = [0] * len(grid[0])
for j, col in enumerate(zip(*grid)):
for x in col:
x_len = int(x <= 0)
x = abs(x)
while x:
x_len += 1
x //= 10
ans[j] = max(ans[j], x_len)
return ans
[sol2-Go]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func findColumnWidth(grid [][]int) []int {
ans := make([]int, len(grid[0]))
for j := range grid[0] {
for _, row := range grid {
xLen := 0
if row[j] <= 0 {
xLen = 1
}
for x := row[j]; x != 0; x /= 10 {
xLen++
}
ans[j] = max(ans[j], xLen)
}
}
return ans
}

func max(a, b int) int { if a < b { return b }; return a }

复杂度分析

  • 时间复杂度:O(mn),其中 m 和 n 分别为 grid 的行数和列数。
  • 空间复杂度:O(1)。返回值不计入。Python 忽略 zip(*grid) 导致的空间。
 Comments
On this page
2639-查询网格图中每一列的宽度