首页 > 其他分享 >Leetcode面试经典150题-54.螺旋矩阵

Leetcode面试经典150题-54.螺旋矩阵

时间:2024-09-03 22:23:21浏览次数:6  
标签:150 matrix int 54 colNext length rowNext Leetcode curCol

  解法都在代码里,不懂就留言或者私信

这个题可能和算法关联不大,coding技巧为上

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        /**先定义结果集 */
        List<Integer> ans = new ArrayList<>();
        /**当前位置从(0,0)开始 */
        int curRow = 0;
        int curCol = 0;
        Set<Integer> existsSet = new HashSet<>();
        /**direction表示当前运动的方向,理论上应该先往右,左边走不动了往下,下面走不动了往左 
        左边走不动了网上,这里我们定义0,1,2,3分别代表右下左上四个方向*/
        int direction = 0;
        /**count表示矩阵中共有多少个数字 */
        int count = matrix.length * matrix[0].length; 
        ans.add(matrix[0][0]);
        existsSet.add(0);
        /**已经加了一个点 */
        int curCount = 1;
        /**还没有收集够所有的就继续 */
        while(curCount < count) {
            /**根据方向确定下一个点走哪里*/
            int rowNext = curRow;
            int colNext = curCol;
            /**根据方向不同确定行列的变化 */
            switch(direction) {
                case 0: 
                    colNext ++;
                    break;
                case 1: 
                    rowNext ++;
                    break;
                case 2:
                    colNext --;
                    break;
                case 3:
                    rowNext --;
                    break;
            }
            if(!existsSet.contains(rowNext*matrix[0].length + colNext) && rowNext >= 0 && colNext >= 0 && rowNext < matrix.length && colNext < matrix[0].length) {
                curRow = rowNext;
                curCol = colNext;
                 /**把当前位置加进去 */
                ans.add(matrix[curRow][curCol]);
                existsSet.add(curRow*matrix[0].length + curCol);
                curCount ++;
            } else {
                /**如果这个位置已经存在了或者越界了,变向 */
                direction = (direction + 1)%4;
            }
        }
        return ans;
    }   
}

标签:150,matrix,int,54,colNext,length,rowNext,Leetcode,curCol
From: https://blog.csdn.net/Chang_Yafei/article/details/141873399

相关文章

  • 代码随想录算法训练营,9月3日 | 454.四数相加II,383. 赎金信,15. 三数之和,18. 四数之和
    454.四数相加II题目链接:454.四数相加II文档讲解︰代码随想录(programmercarl.com)视频讲解︰四数相加II日期:2024-09-03想法:4个数组,两两分开遍历时间复杂度低点,用一个map,key是i+j的值,value是出现次数,对nums3、4只需要判断0-k-l在不在map里,最后依次加上出现次数就行了。Java代......
  • 【前端面试】leetcode树javascript
    写一个树//定义二叉树节点functionTreeNode(val,left,right){this.val=(val===undefined?0:val)this.left=(left===undefined?null:left)this.right=(right===undefined?null:right)}//示例使用constroot=newTr......
  • 322. 零钱兑换(leetcode)
    https://leetcode.cn/problems/coin-change/description/代码上比较麻烦的dp题,由于求的是最少数量,因此求答案时需要初始化无穷大来计算classSolution{publicintcoinChange(int[]coins,intamount){//f[i][j]表示前i个数中选,体积等于amount的选择最少硬......
  • 377. 组合总和 Ⅳ(leetcode)
    https://leetcode.cn/problems/combination-sum-iv/description/此篇题解解释了为什么不能直接用二维完全背包的方式做不过还是建议把这个题当成一个爬楼梯来做classSolution{public:intcombinationSum4(vector<int>&nums,inttarget){//f[i]表示若干数中......
  • 518. 零钱兑换 II(leetcode)
    https://leetcode.cn/problems/coin-change-ii/description/可以直接考虑用完全背包的传统二维做法classSolution{publicintchange(intamount,int[]coins){//题意就是一个完全背包问题//f[i][j]表示前i个数中选,体积等于j的最大选法种数,答案就......
  • LeetCode_0028. 找出字符串第一个匹配项的下标,KMP算法的实现
    题目描述  给你两个字符串haystack和needle,请你在haystack字符串中找出needle字符串的第一个匹配项的下标(下标从0开始)。如果needle不是haystack的一部分,则返回-1。示例1:输入:haystack="sadbutsad",needle="sad"输出:0解释:"sad"在下标0和6处匹......
  • 20240903_162154 mysql 填空题 分组与聚合
    查询tb表所有数据,结果按age升序排select*fromtborderbyageasc查询tb表所有数据,结果按score降序排序select*fromtborderbyscoredesc查询tb表所有数据,结果按age升序排,如果age相同的数据,按score降序排select*fromtborderbyageasc,scoredesc查询sanguo表,......
  • zabbix“专家坐诊”第254期问答
    问题一Q:老师,我重启zabbix-server服务,恢复正常了,然后过了一两分钟再刷新,有报这个错了。我看zabbix-server日志里没什么有用的信息。A:selinux关闭一下Q:是关闭状态A:看看server自监控有没有报错提示,看看有没有什么指标是超过触发器的Q:没有报错,看起来内存用的有点高A:图显示不出来,看看......
  • zabbix“专家坐诊”第254期问答
    问题一Q:老师,我重启zabbix-server服务,恢复正常了,然后过了一两分钟再刷新,有报这个错了。我看zabbix-server日志里没什么有用的信息。A:selinux关闭一下Q:是关闭状态A:看看server自监控有没有报错提示,看看有没有什么指标是超过触发器的Q:没有报错,看起来内存用的有点高A:图显示不......
  • [1054] Select only the records from one GeoSeries that intersect with the polygo
    ToselectonlytherecordsfromoneGeoSeriesthatintersectwiththepolygonsfromanotherGeoSeriesinGeoPandas,youcanusetheintersectsmethodalongwithbooleanindexing.Here’sastep-by-stepguide:ImportGeoPandas:importgeopandasasgpdL......