zoukankan      html  css  js  c++  java
  • 剑指 Offer 29. 顺时针打印矩阵

    输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

    示例 1:

    输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
    输出:[1,2,3,6,9,8,7,4,5]
    

    示例 2:

    输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
    输出:[1,2,3,4,8,12,11,10,9,5,6,7]
    

    限制:

    • 0 <= matrix.length <= 100
    • 0 <= matrix[i].length <= 100

    很简单,但还是有要注意的点:

    这个矩阵的行数和列数未必相等!从第二个样例可以看出来。

    需要元素总数来判断是否吧所有元素添加到结果中。

    遍历矩阵需要用到行数和列数,要区分好m和n。

    class Solution {
    public:
        vector<int> spiralOrder(vector<vector<int>>& matrix) {
            int cnt = 0, level = 0;
            if(matrix.size() == 0) return {};
            int n = matrix.size(), m = matrix[0].size();
            int count = n*m;
            
            vector<int> ans(count);
            
            while(cnt < count){
                for(int j=0+level; j<m-level && cnt<count; j++){
                    ans[cnt++] = matrix[0+level][j];
                }
                for(int i=1+level; i<n-level && cnt<count; i++){
                    ans[cnt++] = matrix[i][m-1-level];
                }
                for(int j=m-2-level; j>=0+level && cnt<count; j--){
                    ans[cnt++] = matrix[n-1-level][j];
                }
                for(int i=n-2-level; i>=1+level && cnt<count; i--){
                    ans[cnt++] = matrix[i][0+level];
                }
                level++;
            }
            
            
            return ans;
    
        }
    };

    我的算法上升空间还很大,今天面试变形二分没撕出来。继续努力吧,项目业务关还是很有信心的,可惜了算法题了。

    好在offer在手,接下来也不慌。

  • 相关阅读:
    C# 局部函数与事件
    PHP curl_multi_strerror函数
    PHP curl_multi_setopt函数
    PHP curl_multi_select函数
    PHP curl_multi_remove_handle函数
    PHP curl_multi_init函数
    用户&权限
    HEOI2019 游记——240秒处的起死回生
    WPF 判断调用方法堆栈
    WPF 判断调用方法堆栈
  • 原文地址:https://www.cnblogs.com/AbsolutelyPerfect/p/14924872.html
Copyright © 2011-2022 走看看