1、二维数组中的查找
题目描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:
仔细观察,找规律。
可以从左下角(右上角)开始查找。若当前的数小于目标值,则向右(向下)一个数继续查找;若当前的数大于目标值,则向上(向左)一个数继续查找;等于就不用说了。
代码实现:
// 从左下角开始查找
public static boolean Find(int target, int[][] array) {
int row = array.length - 1;
int col = 0;
while (row >= 0 && col <= array[0].length - 1) {
if (array[row][col] == target)
return true;
if (array[row][col] > target)
row--;
else
col++;
}
return false;
}
2、替换空格
题目描述:
请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
解题思路:
我是直接从头到尾遍历,遇到空格就替换。
代码实现:
public String replaceSpace(StringBuffer str) {
for(int i = 0; i < str.length(); i++){
if(str.charAt(i) == ' ')
str.replace(i, i + 1, "%20");
}
return str.toString();
}
3、从尾到头打印链表
题目描述:
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
解题思路:
- 反转,可以利用栈的先进后出特性来解决。
- 这道题其实可以利用ArrayList类中add(int index, int element)方法,但每次往list添加元素前,它要先把list中所有元素往后移动一个单位再将新元素添加进去,这个比较费时。
代码实现:
/**
* public class ListNode {
* int val;
* ListNode next = null;
*
* ListNode(int val) {
* this.val = val;
* }
* }
*
*/
import java.util.ArrayList;
import java.util.LinkedList;
public class Solution {
public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
LinkedList<Integer> stack = new LinkedList<>();
while (listNode != null) {
stack.push(listNode.val);
listNode = listNode.next;
}
ArrayList<Integer> list = new ArrayList<>();
while (!stack.isEmpty()) {
list.add(stack.pop());
}
return list;
}
}
来源:CSDN
作者:方小傑
链接:https://blog.csdn.net/weixin_42069140/article/details/104215121