Permutation(递归)
2016-06-14 20:39
429 查看
输入:先输入要求输入的字符的个数,后依次输入(或随机生成)每个字符(不能仅仅是数字)。
输出:全排列的结果。
示例:输入:3 / * 2,输出:/ * 2 / 2 * * / 2 * 2 / 2 * / 2 / *
import java.util.Scanner;
public class Permutation {
private static void swap(String arr[], int a, int b) {
String temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
static void perm(String arr[], int left, int right) {
if (left == right) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" "); //这里是一组数值,不需要换行
}
} else {
for (int j = left; j<= right; j++) {
swap(arr, left, j); // 开始时j=left,第一次不交换(前缀)
perm(arr, left + 1, right); // 每一轮的结果
swap(arr, left, j); // 恢复开始的顺序
}
}
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
String[] arr=new String
;
for (int i = 0; i < arr.length; i++) {
arr[i]=s.next(); //s.next为字符串输入
}
perm(arr,0,arr.length-1);
}
}
输出:全排列的结果。
示例:输入:3 / * 2,输出:/ * 2 / 2 * * / 2 * 2 / 2 * / 2 / *
import java.util.Scanner;
public class Permutation {
private static void swap(String arr[], int a, int b) {
String temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
static void perm(String arr[], int left, int right) {
if (left == right) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" "); //这里是一组数值,不需要换行
}
} else {
for (int j = left; j<= right; j++) {
swap(arr, left, j); // 开始时j=left,第一次不交换(前缀)
perm(arr, left + 1, right); // 每一轮的结果
swap(arr, left, j); // 恢复开始的顺序
}
}
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int n = s.nextInt();
String[] arr=new String
;
for (int i = 0; i < arr.length; i++) {
arr[i]=s.next(); //s.next为字符串输入
}
perm(arr,0,arr.length-1);
}
}
相关文章推荐
- Android之startService与bindService的区别
- Struts2的文件上传与下载
- 指令集及流水线基本概念
- hdu3472(混合图欧拉路径判断)
- 黑名单
- 使用JDBC调用mysql存储过程
- Java数据结构之简单的链表的实现
- Struts2下载文件时的Action的配置
- imx6q 修改开机LOGO指南
- windows浏览器访问linux下hadoop文件块
- linux下挂载windows目录
- [bzoj2119]股市的预测
- C指针笔记
- NOI模拟 热身赛T1
- css里面鼠标的形状-----》easyui哪点事
- ORM DAO MVC POJO
- linux 安装nginx(亲测)
- 新生活开始了
- android studio中编译问题
- Android权限【大全】