1-不处理有重复数字情况-全排列

单纯针对数学问题而言,比如求123的所有不同次序有多少种?

123/132/213/231/312/321 一共六种

其实n个数就有n!种。

前提是不同的n位数。

对于全排列问题采用回溯法。


针对全排列不处理重复数字问题,代码如下:

若是考虑重复数字,则需要进行剪枝处理。

package lanqiao;
/*
 * 不处理重复数字的全排列-回溯法模板
 * void arrangement()全排列
 * 
 */
import java.util.Scanner;
public class Main{
public static final int N = 1000; 
public static char[] str = new char[N];//输入的字符串
//public static char[] buf = new char[N];//符合条件的排列
//public static int[] vis = new int [N];//标记数组
public static int total = 0;//统计排列的个数
public static int len = 0;//输入字符串的长度
public static void arrangement(int b) {
if(b>=len) {
total++;
System.out.println(java.util.Arrays.toString(str));
}
for(int i = b;i<str.length;i++) {
{
char k=str[b];str[b]=str[i];str[i]=k;//选定第一位,对其他的进行操作
}
arrangement(b+1);
{
char k = str[b];str[b]=str[i];str[i]=k;//换回来再做处理
}
}
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
str = cin.next().toCharArray();
total = 0;
len = str.length;
arrangement(0);
System.out.println(total);
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值