什么是全排列?
所谓全排列就是把几个字符或数字(以下称为元素),进行全部排列
例如:字符串 abc
那么就可以这样排
abc
acb
bac
bca
cab
cba
把全部元素能用到的排列方式进行全部排列一遍
什么时候用全排列?
有的题目会要求你全部排出几种情况?把所有排列状况按升序输出.....
但有的时候不用
当某一个数非常大并且只输出此类有几种排列方法,有几种方式,几种走法,只输出结果的这种用动态规划
全排列怎么写?
public static void f(int x){
for(int i = x; i < arrs.length;i++){
char y = arrs[x];
arrs[x] = arrs[i];
arrs[i] = y;
f(x+1);
y = arrs[x];
arrs[x] = arrs[i];
arrs[i] = y;
}
}
只要背会,大部分全排列题都能做!
能不能来个例题?
题目:
对于某个串,比如:“1234”,求它的所有全排列。
并且要求这些全排列一定要按照字母的升序排列。
解题:
package com.cxyax.lianxi2;
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
/**
* 标题:全排列
对于某个串,比如:“1234”,求它的所有全排列。
并且要求这些全排列一定要按照字母的升序排列。
* @author ah xin
*
*/
public class MainQ2 {
static Set<String> set = new TreeSet<>();
static char[] arrs;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
char[] arr = str.toCharArray();
arrs = arr;
f(0);
for(String s : set){
System.out.println(s);
}
System.out.println(set.size());
}
public static void f(int x){
String str = "";
for(int i = 0; i < arrs.length;i++){
str += arrs[i]+"";
}
set.add(str);
for(int i = x; i < arrs.length;i++){
char y = arrs[x];
arrs[x] = arrs[i];
arrs[i] = y;
f(x+1);
y = arrs[x];
arrs[x] = arrs[i];
arrs[i] = y;
}
}
}
站长下课了,不写了,你们自己琢磨琢磨,有什么疑问可以评论....
以上是《JAVA 蓝桥杯算法 全排列 背公式即可》的全部内容,
感谢您对程序员阿鑫博客的支持!
版权说明
文章采用: 《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权。版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!