剑指offer-模拟专题

文章讲述了如何使用Java实现矩阵的顺时针螺旋遍历算法以及栈来验证特定的压入和弹出序列。Solution类中包含spiralOrder方法处理矩阵问题,而validateBookSequences方法则用于检查栈操作是否遵循给定的序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

剑指offer-模拟专题

29.顺时针打印矩阵

顺时针打印矩阵

class Solution {
    public int[] spiralOrder(int[][] matrix) {
        if(matrix.length==0) return new int[0];
        int m=matrix.length,n=matrix[0].length;//m行,n列
        int []res=new int[m*n];
        int l=0,r=n-1,u=0,d=m-1,x=0;

        while(true){
        for(int i=l;i<=r;++i){
            res[x]=matrix[u][i];
            x++;
        }
        u++;
        if(u>d) break;
        for(int i=u;i<=d;++i) {
            res[x]=matrix[i][r];
            x++;
        }
        r--;
        if(r<l) break;
        for(int i=r;i>=l;--i){
            res[x]=matrix[d][i];
            x++;
        } 
        d--;
        if(d<u) break;
        for(int i=d;i>=u;--i){
            res[x]=matrix[i][l];
            x++;
        } 
        l++;
        if(l>r) break;
            
    }
    return res;
    }

}

思考

设定好边界,注意细节

31.栈的压入、弹出序列

栈的压入、弹出序列

class Solution {
    public boolean validateBookSequences(int[] pushed, int[] popped) {
        Stack<Integer> stack = new Stack<>();
        int i = 0;
        for(int num : pushed) {
            stack.push(num); // num 入栈
            while(!stack.isEmpty() && stack.peek() == popped[i]) { // 循环判断与出栈
                stack.pop();
                i++;
            }
        }
        return stack.isEmpty();
    }
}

思考

入栈操作: 按照压栈序列的顺序执行。
出栈操作: 每次入栈后,循环判断 “栈顶元素 === 弹出序列的当前元素” 是否成立,将符合弹出序列顺序的栈顶元素全部弹出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值