剑指offer--顺时针打印矩阵

题目描述
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.


Java AC代码:

import java.util.ArrayList;

public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
       ArrayList<Integer> arr = new ArrayList<>();
       int row1 = 0;
       int row2 = matrix.length;
       int col1 = 0;
       int col2 = matrix[0].length;

       while(true){
           //从左到右打印
           for(int i = col1 ; i < col2 ; i++){
               arr.add(matrix[row1][i]);
           }
           row1++;
           if (row1 >= row2){
               break;
           }

           //从上到下打印
           for(int i = row1 ; i < row2 ; i++){
               arr.add(matrix[i][col2-1]);
           }
           col2--;
           if ( col2 <= col1){
               break;
           }

           //从右到左打印
           for(int i = col2-1 ; i >= col1 ; i--){
               arr.add(matrix[row2-1][i]);
           }
           row2--;
           if ( row1 >= row2){
               break;
           }

           //从下到上打印
           for(int i = row2-1 ; i >= row1 ; i--){
               arr.add(matrix[i][col1]);
           }
           col1++;
           if ( col1 >= col2){
               break;
           }
       }

       return arr;
    }
}

C++ AC代码

class Solution {
    public:
        vector<int> printMatrix(vector<vector<int> > matrix) {
            int row1 = 0, row2 = matrix.size();
            int col1 = 0, col2 = matrix[0].size();
            vector<int> result;
            while(1){
                for(int i = col1 ; i < col2 ; i++){
                    result.push_back(matrix[row1][i]);
                }
                row1++;
                if(row1 >= row2){
                    break;
                }

                for(int i = row1 ; i < row2 ; i++){
                    result.push_back(matrix[i][col2-1]);
                }
                col2--;
                if(col2 <= col1){
                    break;
                }

                for(int i = col2-1 ; i >= col1 ; i--){
                    result.push_back(matrix[row2-1][i]);
                }
                row2--;
                if(row2 <= row1){
                    break;
                } 

                for(int i = row2-1 ; i >= row1 ; i--){
                    result.push_back(matrix[i][col1]);
                } 
                col1++;
                if(col1 >= col2){
                    break;
                }
            }
            return result;
        }
};
阅读更多
版权声明:本文为博主原创文章,若需转载,请注明http://blog.csdn.net/qq_30091945 https://blog.csdn.net/qq_30091945/article/details/70742540
文章标签: 剑指offer
个人分类: 剑指offer
所属专栏: 剑指offer题解
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭