五、其他
9、链表回文结构
题目1:
-
二维数组的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
package letcode;
public class findtarget {
public static boolean Find(int target, int[][] array) {
int rowLength = array.length;
if (rowLength <= 0) {
return false;
}
int colLength = array[0].length;
if (colLength <= 0) {
return false;
}
int col = rowLength - 1;
int row = 0;
for (; (col >= 0) && (row < rowLength);) {
int tmpValue = array[row][col];
System.out.println(tmpValue);
if (target == tmpValue) {
return true;
} else if (target > tmpValue) {
// 如果當前的target大於右上角的值,則row++
row++;
} else {
// 如果當前的traget小於右上角的值,則col--
col--;
}
}
return false;
}
public static void main(String[] args) {
// 7 [[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]
// 16,[[]]
int array[][] = { {}, {} };
System.out.println(Find(7, array));
}
}
2、替换空格
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:新定义一个往后追加。
String emptyString = "";
if (str == null) {
return emptyString;
}
String result = str.toString();
return result.replaceAll(" ", "%20");
3、從頭到尾打印鏈錶
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
package letcode;
import java.util.ArrayList;
import java.util.Collections;
public class PrintListFromTailToHead {
private static class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
ArrayList<Integer> resultList = new ArrayList<Integer>(0);
if (listNode == null) {
return resultList;
}
while (listNode != null) {
resultList.add(listNode.val);
listNode = listNode.next;
}
Collections.reverse(resultList);
return resultList;
}
public static void main(String[] args) {
int[] array = { 67, 0, 24, 58 };
ListNode nextListNode = null;
for (int i = array.length; i > 0; i--) {
ListNode listNode = new ListNode(array[i - 1]);
listNode.next = nextListNode;
nextListNode = listNode;
}
ArrayList<Integer> printListFromTailToHead = printListFromTailToHead(nextListNode);
System.out.println(printListFromTailToHead);
}
}
4.重建二叉树
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。
package letcode;
import java.util.ArrayList;
import java.util.List;
public class ReConstructBinaryTree {
private static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
private static TreeNode reConstructBinaryTree(int[] pre, int[] in) {
if ((pre == null) || (in == null)) {
return null;
}
if ((pre.length == 0) || (in.length == 0)) {
return null;
}
if (pre.length != in.length) {
return null;
}
TreeNode rootNode = new TreeNode(pre[0]);
for (int i = 0; i < in.length; i++) {
// 遍歷in的根
if (pre[0] == in[i]) {
rootNode.left = reConstructBinaryTree(
copyAndRange(pre, 1, i + 1), copyAndRange(in, 0, i));
rootNode.right = reConstructBinaryTree(
copyAndRange(pre, i + 1, pre.length),
copyAndRange(in, i + 1, in.length));
}
}
return rootNode;
}
private static int[] copyAndRange(int[] origin, int from, int to) {
List<Integer> list = new ArrayList<Integer>(0);
for (int i = 0; i < origin.length; i++) {
if ((i >= from) && (i < to)) {
list.add(origin[i]);
}
}
Integer[] a = (Integer[]) list.toArray(new Integer[list.size()]);
int result[] = new int[a.length];
for (int i = 0; i < a.length; i++) {
result[i] = a[i];
}
return result;
}
private static void printNode(TreeNode rootNode) {
if (rootNode != null) {
System.out.println(rootNode.val);
printNode(rootNode.left);
printNode(rootNode.right);
}
}
public static void main(String[] args) {
int[] pre = { 1, 2, 4, 7, 3, 5, 6, 8 };
int[] mid = { 4, 7, 2, 1, 5, 3, 8, 6 };
TreeNode reConstructBinaryTree = reConstructBinaryTree(pre, mid);
printNode(reConstructBinaryTree);
}
}