剑指 Offer 29. 顺时针打印矩阵 + 蛇形矩阵 + 模拟 + 思维题

剑指 Offer 29. 顺时针打印矩阵

Offer_29

题目描述:

题解分析:

  • 题目的初衷是将这道题当做一个简单题处理
  • 这道题一开始想的太复杂了,其实可以参考迷宫广度优先搜索的过程,只不过在选定一个方向遍历时,除非遇到改变方向的情况,否则一直走下去。
  • 需要注意的是:这里的方向二维数组(direction),它里面四个方向需要满足顺时针的顺序。
class Solution {
    public int[] spiralOrder(int[][] matrix) {
        if (matrix == null || matrix.length == 0)
            return  new int[0];;
        int n = matrix.length;
        int m = matrix[0].length;
        int total = n * m;
        int[] result = new int[total];
        boolean [][]isTravel = new boolean[n][m];
        //顺时针的旋转方向
        int [][]direction = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
        int currentDir = 0;
        int currenti=0,currentj=0;
        for(int i=0; i<total; i++){
            result[i] = matrix[currenti][currentj];
            isTravel[currenti][currentj] = true;
            int tempi = currenti + direction[currentDir][0];
            int tempj = currentj + direction[currentDir][1];
            //改变遍历的方向
            if(tempi <0 || tempi >= n || tempj <0 || tempj >=m || isTravel[tempi][tempj]){
                currentDir = (currentDir +1) % 4;
            }
            currenti += direction[currentDir][0];
            currentj += direction[currentDir][1];
        }
        return result;
    }
}
posted @   Garrett_Wale  阅读(78)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示