6333. 查询网格图中每一列的宽度
给你一个下标从 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
原站题解
javascript 解法, 执行用时: 68 ms, 内存消耗: 51.9 MB, 提交时间: 2024-04-27 00:10:48
/** * @param {number[][]} grid * @return {number[]} */ var findColumnWidth = function(grid) { const n = grid[0].length; const ans = Array(n); for (let j = 0; j < n; j++) { let mn = 0, mx = 0; for (const row of grid) { mn = Math.min(mn, row[j]); mx = Math.max(mx, row[j]); } let len = 1; for (let x = Math.max(Math.floor(mx / 10), -mn); x; x = Math.floor(x / 10)) { len++; } ans[j] = len; } return ans; };
rust 解法, 执行用时: 0 ms, 内存消耗: 2.4 MB, 提交时间: 2024-04-27 00:10:28
impl Solution { pub fn find_column_width(grid: Vec<Vec<i32>>) -> Vec<i32> { let n = grid[0].len(); let mut ans = vec![0; n]; for j in 0..n { let mut mn = 0; let mut mx = 0; for row in &grid { mn = mn.min(row[j]); mx = mx.max(row[j]); } let mut len = 1; let mut x = (mx / 10).max(-mn); while x > 0 { len += 1; x /= 10; } ans[j] = len; } ans } }
cpp 解法, 执行用时: 14 ms, 内存消耗: 12.6 MB, 提交时间: 2024-04-27 00:10:10
class Solution { public: vector<int> findColumnWidth(vector<vector<int>>& grid) { int n = grid[0].size(); vector<int> ans(n); for (int j = 0; j < n; j++) { int mn = 0, mx = 0; for (auto& row : grid) { mn = min(mn, row[j]); mx = max(mx, row[j]); } int len = 1; for (int x = max(mx / 10, -mn); x; x /= 10) { len++; } ans[j] = len; } return ans; } };
java 解法, 执行用时: 3 ms, 内存消耗: 44.9 MB, 提交时间: 2024-04-27 00:09:46
class Solution { public int[] findColumnWidth(int[][] grid) { int n = grid[0].length; int[] ans = new int[n]; for (int j = 0; j < n; j++) { int mn = 0; int mx = 0; for (int[] row : grid) { mn = Math.min(mn, row[j]); mx = Math.max(mx, row[j]); } int len = 1; for (int x = Math.max(mx / 10, -mn); x > 0; x /= 10) { len++; } ans[j] = len; } return ans; } }
python3 解法, 执行用时: 41 ms, 内存消耗: 17.6 MB, 提交时间: 2024-04-27 00:09:36
class Solution: def findColumnWidth(self, grid: List[List[int]]) -> List[int]: ans = [] for col in zip(*grid): x_len = 1 x = max(max(col) // 10, -min(col)) while x: x_len += 1 x //= 10 ans.append(x_len) return ans
golang 解法, 执行用时: 20 ms, 内存消耗: 6.4 MB, 提交时间: 2023-04-17 16:40:35
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 }
python3 解法, 执行用时: 48 ms, 内存消耗: 16.2 MB, 提交时间: 2023-04-17 16:40:19
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)]