题目描述
如果用a b c d这4个字母组成一个串,有4!=24种,如果把它们排个序,每个串都对应一个序号:
abcd 0
abdc 1
acbd 2
acdb 3
adbc 4
adcb 5
bacd 6
badc 7
bcad 8
bcda 9
bdac 10
bdca 11
cabd 12
cadb 13
cbad 14
cbda 15
cdab 16
cdba 17
…
现在有不多于10个两两不同的小写字母,给出它们组成的串,你能求出该串在所有排列中的序号吗?
【输入格式】
一行,一个串。
【输出格式】
一行,一个整数,表示该串在其字母所有排列生成的串中的序号。注意:最小的序号是0。
例如:
输入:
bdca
程序应该输出:
11
再例如:
输入:
cedab
程序应该输出:
70
思路:以前用过dfs写全排列,但是忘记了,通过上一题回想起来了,emmmm
import java.util.Arrays;
import java.util.Scanner;
public class for5_4 {
static int len = 0;
static char[] res = new char[10];
static int[] mark = new int[150];
static long count = -1;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner read = new Scanner(System.in);
String str = read.next();
len = str.length();
dfs(0,str);
read.close();
}
public static void dfs(int n,String end)
{
if(len==n)
{
count++;
String str = String.valueOf(res).trim();//没有trim会错误
if(str.equals(end))
{
System.out.println(count);
}
return;
}
for(int i=97;i<97+len;i++)
{
if(mark[i]==0)
{
res[n] = ((char)i);
mark[i] = 1;
dfs(n+1,end);
mark[i] = 0;
}
}
}
}