leetcode.29 順時針打印矩陣

面試題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

這個就按順時針一步一步走

記得不要越界就好

#include <iostream>
#include <vector>

using namespace std;

class Solution {
public:
    vector<int> spiralOrder(vector<vector<int>>& matrix) {
    	vector<int> res;
    	if(matrix.empty()){
            return res;
        }
    	int lrTop = 0;
    	int lrBottom = matrix.size() - 1;
    	int tbLeft = 0;
    	int tbRight = matrix[0].size() - 1;
    	while(true){
    		// go right
    		for(i = 0; i <= tbRight; i++){
    			res.push_back(matrix[lrTop][i]);
    		}
    		lrTop++;
    		if(lrTop > lrBottom){
    			break;
    		}
    		// go down
    		for(i = lrTop; i <= lrBottom; i++){
    			res.push_back(matrix[i][tbRight]);
    		}
    		tbRight--;
    		if(tbRight < tbLeft){
    			break;
    		}
    		// go left
    		for(i = tbRight; i >= tbLeft; i--){
    			res.push_back(matrix[lrBottom][i]);
    		}
    		lrBottom--;
    		if(lrBottom < lrTop){
    			break;
    		}
    		// go up
    		for(i = lrBottom; i >= lrTop; i--){
    			res.push_back(matrix[i][tbLeft]);
    		}
    		tbLeft++;
    		if(tbLeft > tbRight){
    			break;
    		}
    	}
    	return res;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章