一.题目描述
给你一个下标从 0 开始的 m x n
整数矩阵 grid
。矩阵中某一列的宽度是这一列数字的最大 字符串长度 。
- 比方说,如果
grid = [[-10], [3], [12]]
,那么唯一一列的宽度是3
,因为-10
的字符串长度为3
。
请你返回一个大小为 n
的整数数组 ans
,其中 ans[i]
是第 i
列的宽度。
一个有 len
个数位的整数 x
,如果是非负数,那么 字符串长度 为 len
,否则为 len + 1
。
二.思路分析
友友们可以容易地看到这是个暴力遍历就能解决的打卡题呢!只需遍历每一列得到最宽的值即可,虽然思路非常简单,但是敲代码的时候还是得细心哦,下面给大家分享一下我的错误典例
三.简单题更要扣细节哦
代码中我用find_length函数来计算每个数字的宽度,双层遍历得到每列元素,代码如下:
class Solution {
public:
vector<int> ans;
int data_ans=0;
//记录每列的宽度
int find_length(int m)
{
int n=1,w=m;
if(m<0) n++;
while(m)
{
if(m/=10)
n++;
}
return n;
}
vector<int> findColumnWidth(vector<vector<int>>& grid) {
int n = grid.size(), m = grid[0].size();
for(int i=0;i<m;i++)//列
{
data_ans=0;
for(int j=0;j<n;j++)//行
{
if(data_ans<=find_length(grid[j][i]))
data_ans=find_length(grid[j][i]);
}
ans.emplace_back(data_ans);
}
return ans;
}
};
易错点:
(1)记得负数要提前+1哦,对于负数的操作也是很有讲究的
错误示例:
if(w) return n;
else return (n+1);
//如果是负数,宽度加1,返回n+1
//看起来非常正确,实则大错特错
正确示例
if(m<0) n++;
return n;
(2)我们可以将手动得到数组宽度的代码省掉,转换为字符串直接获取长度,提高效率
class Solution {
public:
vector<int> findColumnWidth(vector<vector<int>>& grid) {
int n = grid.size(), m = grid[0].size();
vector<int> ans(m);
for(int i=0;i<m;i++)//列
{
for(int j=0;j<n;j++)//行
{
ans[i]=max(ans[i],(int)to_string(grid[j][i]).size());
}
}
return ans;
}
};
四.完结撒花
总结一下,是道打卡题,更需要大家认真仔细呀,一起噶油呀