解题思想:全排列➕去重操作
全排列核心代码部
for(int i=begin;i<end;i++) { int temp=n[i]; n[i]=n[begin]; n[begin]=temp; qpl(n, begin+1, end); temp=n[i]; n[i]=n[begin]; n[begin]=temp; }
去重操作代码部
if(begin==end) { HashSet<Integer>check=new HashSet<Integer>(); check.add(n[0]+n[1]+n[2]); check.add(n[3]+n[4]+n[5]); check.add(n[6]+n[7]+n[8]); check.add(n[0]+n[3]+n[6]); check.add(n[1]+n[4]+n[7]); check.add(n[2]+n[5]+n[8]); check.add(n[0]+n[4]+n[8]); check.add(n[2]+n[4]+n[6]); if(check.size()==8) { sum++; } }
整体:
package 一六javaB组决赛;
import java.util.HashSet;
public class B{ static int sum=0; static HashSet<int[]>hash=new HashSet<int[]>(); public static void qpl(int n[],int begin,int end) { if(begin==end) { HashSet<Integer>check=new HashSet<Integer>(); check.add(n[0]+n[1]+n[2]); check.add(n[3]+n[4]+n[5]); check.add(n[6]+n[7]+n[8]); check.add(n[0]+n[3]+n[6]); check.add(n[1]+n[4]+n[7]); check.add(n[2]+n[5]+n[8]); check.add(n[0]+n[4]+n[8]); check.add(n[2]+n[4]+n[6]); if(check.size()==8) { sum++; } } else { for(int i=begin;i<end;i++) { int temp=n[i]; n[i]=n[begin]; n[begin]=temp; qpl(n, begin+1, end); temp=n[i]; n[i]=n[begin]; n[begin]=temp; } } } public static void main(String[] args) { int n[]= {1,2,3,4,5,6,7,8,9}; qpl(n,0,9); System.out.print(sum/8); } }