数据结构和算法的笔试题
- 排序:1、全排列:给出五个数字12345的所有排列。
public static void perm(int[] list) {
perm(list,0);
}
private static void perm(int[] list, int k) {
if (k == list.length) {
for (int i = 0; i < list.length; i++) {
System.out.print(list[i]);
}
System.out.println();
}else{
for (int i = k; i < list.length; i++) {
swap(list, k, i);
perm(list, k + 1);
swap(list, k, i);
}
}
}
private static void swap(int[] list, int pos1, int pos2) {
int temp = list[pos1];
list[pos1] = list[pos2];
list[pos2] = temp;
}
public static void main(String[] args) {
int[] x = {1, 2};
perm(x);
}
- 排序:2、输入三个整数x,y,z,请把这三个数由小到大输出
import java.util.Arrays;
import java.util.Scanner;
public static void main(String[] args) {
System.out.println("请输入三位整数:");
Scanner in = new Scanner(System.in);
int[] arr = new int[3];
for (int i = 0;i<3;i++){
arr[i] = in.nextInt();
}
Arrays.sort(arr);
for (int i=0;i<arr.length;i++){
System.out.println(arr[i] + "");
}
}
- 字符串:
3、描述:给定一个非空字符串s和一个包含非空单词列表的字典wordDict,判断s是否可以被空格拆分为一个或者多个字典中出现的单词。
说明:
1)拆分时可以重复使用字典中的单词。
2)你可以建设字典中没有重复的单词。
public static void main(String[] args) {
String source = "xinhuahuaxinhua";
String[] wordDict = {"xinhua","hua"};
System.out.println(execute(source,0,wordDict));
}
private static boolean execute(String source,int i,String[] wordDict) {
//如果已到结尾,则返回
if (i >= source.length()) {
return true;
}
boolean v = false;
for (String dict : wordDict) {
int l = dict.length();
if (i + l <= source.length()) {
String current = source.substring(i, i + l);
if (!dict.equals(current)) {
continue;
}
//如果当前字典匹配,则比较剩余的子字符串是否仍然匹配
boolean x = exe