牛客刷题——剑指offer

本文介绍了如何解决《剑指Offer》中的三个编程题目:从尾到头打印链表、替换空格以及二维数组中的查找。提供了两种不同的链表解决方案,利用栈的特点实现从尾到头打印;详细解释了替换空格的两种方法,包括使用StringBuilder和replaceAll函数;并展示了二维数组查找的解题思路。文章还强调了牛客网作为面试和刷题平台的价值。

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

 💟💟前言

🥇作者简介:友友们大家好,我是你们的小王同学😗😗

🥈个人主页:小王同学🚗

🥉 系列专栏:牛客刷题专栏📖

📑 推荐一款非常火的面试、刷题神器👉 牛客网

觉得小王写的不错的话 麻烦动动小手 点赞👍 收藏⭐  评论📄

今天给大家带来的刷题系列是:剑指offer

剑指offer 刷题专属链接👉剑指offer

 

 

 里面有非常多的题库 跟面经知识 真的非常良心了!!

今天给大家带来的是 刷题 剑指offer里的题目

剑指offer里的题目绝大部分都是面试常考题目 

所以我们要熟练地刷上几遍

JZ6 从尾到头打印链表🏀

从尾到头打印链表

题目描述🥌:

解题思路:

两种方法

1.用线性表把节添加到里面 最后创建一个新的线性表 倒着输出即可

2.栈 的实现 根据栈后进先出的特点!

 代码实现🏀:

方法1:


/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        ArrayList<Integer> list =new ArrayList<>();
        while(listNode!=null){ //头结点不为空的情况下
            list.add(listNode.val); //把结点的值都添加进list中
            listNode=listNode.next; //往后遍历
        }
     ArrayList <Integer> ans  =new ArrayList<>();
        int n=list.size();
        for(int i=n-1;i>=0;i--){  //逆序输出
            ans.add(list.get(i));
        }
        return ans;
        
    }
}

 这一声清脆响亮的声音 我直接过辣~~

方法2:

import java.util.*;
/**
*    public class ListNode {
*        int val;
*        ListNode next = null;
*
*        ListNode(int val) {
*            this.val = val;
*        }
*    }
*
*/
import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
      ArrayList<Integer> list= new ArrayList<>();
      Stack<Integer> stack =new Stack<>();
        while(listNode!=null){
            stack.push(listNode.val);
            listNode=listNode.next;
        }
        while(!stack.empty()){ //如果栈不为空就打印
            list.add(stack.pop()); //将list添加栈顶元素出站并返回
            
        }
        return list;
        
    }
}

 

 过~~~~辣~~~

 JZ5 替换空格🛶

替换空格

题目描述🥽

解题思路⏳:

java中字符串本身就是不能修改的 我们可以创建一个StringBuilder对象

对内容进行添加操作 

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串
     */
    public String replaceSpace (String s) {
        StringBuilder sb= new StringBuilder();
        for(int i=0;i<s.length();i++){
            char ch=s.charAt(i);
            if(ch==' '){ //遇到空格 就追加%20
                sb.append("%20");
            }else{
                sb.append(ch); //没有就添加遍历的字符
            }
            
            
        }
        return sb.toString(); //返回字符串格式
        
        
        
        // write code here
    }
}

还可以用java 自带的replaceAll方法更简单!

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串
     */
    public String replaceSpace (String s) {
        // write code here
        return s.replaceAll(" ","%20");
    }
}

 过 过 过 辣~~~~

 JZ4 二维数组中的查找

题目描述♟:

解题思路:

由于行列递增,可以得出:
a.在一列中的某个数字,其上的数字都比它小
b.在一行中的某个数字,其右的数字都比它大

public class Solution {
    public boolean Find(int target, int [][] array) {
      
        int n=array.length;
        if(n==0) return false;
        boolean flag=true;
        for(int i=0;i<n;i++){
            for(int j=0;j<array[i].length;j++){
                if(array[i][j]==target){ //找到就返回true
                    return true;
                }else if(array[i][j]>target) //大于的话 就break 
                    break;
                else if(array[i][0]>target) 
        //如果第一列的元素大于target那么后面不可能找到taget
                    flag=false;
                    
                
                
            }
            if(!flag)  break;
              
            
           
        }
         return false;
    }
}

 过辣~

牛客的oj测试也是非常好用的 还有代码补全功能 acm机制 简直绝绝子!

还等什么 快注册起来跟小王同学一起刷题吧(doge)👉👉牛客网

评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王同学要变强

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值