顺时针打印矩阵【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题解》

全部评论

相关推荐

马上就好了:HR看了以为来卧底来了
点赞 评论 收藏
分享
2025-12-28 16:32
重庆邮电大学 Java
程序员花海:1.技能放最后,来面试默认你都会,技能没啥用 2.实习写的看起来没啥含金量,多读读部门文档,包装下 接LLM这个没含金量 也不要用重构这种 不会给实习生做的 3.抽奖这个还是Demo项目,实际在公司里面要考虑策略,满减,触发点,触发规则 库存 之类的,不是这个项目这么简单 4.教育背景提前,格式为 教育背景 实习 项目 技能 自我评价
简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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