题解 | #顺时针打印矩阵#

顺时针打印矩阵

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

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printMatrix(int [][] matrix) {
        ArrayList<Integer> ans = new ArrayList<>();
        int m = matrix.length;
        int n = matrix[0].length;
        trav(ans, matrix, 0, m - 1, 0, n - 1, false);
        return ans;
    }

    public void trav(ArrayList<Integer> ans, int[][] matrix, int x0, int x1, int y0, int y1, boolean rev) {
        if(x0 > x1 || y0 > y1) {
            return;
        }
        if(x0 == x1) {
            if(rev) {
                for(int i = y1; i >= y0; i--) {
                    ans.add(matrix[x0][i]);
                }
            } else {
                for(int i = y0; i <= y1; i++) {
                    ans.add(matrix[x0][i]);
                }
            }
            return;
        }
        if(y0 == y1) {
            if(rev) {
                for(int i = x1; i >= x0; i--) {
                    ans.add(matrix[i][y0]);
                }
            } else {
                for(int i = x0; i <= x1; i++) {
                    ans.add(matrix[i][y0]);
                }
            }
            return;
        }
        trav(ans, matrix, x0,     x0,     y0, y1, false);
        trav(ans, matrix, x0 + 1, x1 - 1, y1, y1, false);
        trav(ans, matrix, x1,     x1,     y0, y1, true);
        trav(ans, matrix, x0 + 1, x1 - 1, y0, y0, true);
        trav(ans, matrix, x0 + 1, x1 - 1, y0 + 1, y1 - 1, false);
    }
}
全部评论

相关推荐

05-21 15:47
门头沟学院 Java
浪漫主义的虹夏:项目有亮点吗,第一个不是纯玩具项目吗,项目亮点里类似ThreadLocal,Redis储存说难听点是花几十分钟绝大部分人都能学会,第二个轮子项目也没体现出设计和技术,想实习先沉淀,好高骛远的自嗨只会害了自己
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务