题目:
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
Solution(0,n-1);//a[0]~a[n-1]
System.out.println(sum%1007);//对1007取模
}
static int[] a={1,2,3,4,5,6,7,8,9,10};//1<=n<=10
static int sum = 0;//逆序对的计数变量
public static void Solution(int begin,int end){//begin,end分别为数列的首个数和最后一个数的下标
if(begin==end){//递归结束,产生一个全排列
for(int i=0;i<=end;i++){//遍历一个全排列
for(int j=i+1;j<=end;j++) {
if(a[i]>a[j]) {//判断是否有逆序对
sum++;
}
}
}
}else{
for(int i=begin;i<=end;i++){
int temp=a[begin];//交换a[begin]和a[i]
a[begin]=a[i];
a[i]=temp;
Solution(begin+1, end);//对余下的数进行全排列
temp=a[begin];//还原a[begin]和a[i]
a[begin]=a[i];
a[i]=temp;
}
}
}
}
求全排列的方法参考了这篇文章:(36条消息) JAVA递归实现对1~n全排列【附代码详细执行过程】_m0_51656781的博客-CSDN博客_java全排列递归算法
评测结果截图: