题目:
代码:
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<=10static 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全排列递归算法
评测结果截图: