顺时针打印矩阵【Java版】

顺时针打印矩阵

http://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a

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

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> res = new ArrayList<Integer>();
        //定义上下左右的边界,共需要4个变量
        int up = 0;
        int down = matrix.length-1;//这里的4个边界全部做到可以达到
        int left = 0;
        int right = matrix[0].length-1;
        while(true){//while中有4个类似的结构,但是不适合合并,因为合并也不会减少代码
            if(up>down)break;//函数开头不用另外验matrix,因为while里面的判断 已经做得很完善了
            for(int i = left; i<=right; ++i) res.add(matrix[up][i]);
            ++up;//缩小边界
            if(left>right)break;
            for(int i = up; i<=down; ++i) res.add(matrix[i][right]);
            --right;
            if(up>down)break;
            for(int i = right; i>=left; --i) res.add(matrix[down][i]);
            --down;
            if(left>right)break;
            for(int i = down; i>=up; --i) res.add(matrix[i][left]);
            ++left;
        }
        return res;
    }
}
//时间复杂度、空间复杂度都是:二维矩阵matrix的规模 O(N)
《剑指Offer-Java题解》 文章被收录于专栏

《剑指Offer-Java题解》

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务