里面有非常多的题库 跟面经知识 真的非常良心了!!
今天给大家带来的是 刷题 剑指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机制 简直绝绝子!
还等什么 快注册起来跟小王同学一起刷题吧