本文主要是介绍2024.4.27力扣每日一题——查询网格图中每一列的宽度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
2024.4.27
- 题目来源
- 我的题解
- 方法一 遍历
- 方法二 优化
题目来源
力扣每日一题;题序:2639
我的题解
方法一 遍历
遍历每一列的所有数字,并计算长度,取其中最大的作为这一列的结果
时间复杂度:O(nmC)。C表示数字的最大 字符串长度
空间复杂度:O(1)
public int[] findColumnWidth(int[][] grid) {int n=grid.length,m=grid[0].length;int[] res=new int[m];for(int i=0;i<m;i++){int t=0;for(int j=0;j<n;j++){t=Math.max(t,getNumLen(grid[j][i]));}res[i]=t;}return res;
}
//手动计算版本
public int getNumLen(int num){int res=0;if(num<=0){res++;num=-num;}while(num>0){num/=10;res++;}return res;
}
//转换为字符串
public int getNumLen1(int num){return Integer.toString(num).length();
}
方法二 优化
因为都是数字,因此不用每个都计算长度,只需要将一列的最小值和最大值计算长度就行了。
时间复杂度:O(nmC)
空间复杂度:O(1)
public int[] findColumnWidth(int[][] grid) {int n=grid.length,m=grid[0].length;int[] res=new int[m];for(int i=0;i<m;i++){//记录每一列的最小值和最大值int max=grid[0][i],min=grid[0][i];for(int j=0;j<n;j++){max=Math.max(max,grid[j][i]);min=Math.min(min,grid[j][i]);}int t=getNumLen(max);t=Math.max(t,getNumLen(min));res[i]=t;}return res;
}
public int getNumLen(int num){int res=0;if(num<=0){res++;num=-num;}while(num>0){num/=10;res++;}return res;
}
有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~
这篇关于2024.4.27力扣每日一题——查询网格图中每一列的宽度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!