##*#=#*##=###
要求9个数字都必须用到。
正好前几天用递归解决了遍历m个元素取k个的问题,今天用同样的思路做出了全排列。
每次循环都要开一个新数组,内存开销大。
也可以把九个数字转成StringBuilder,是否内存占用会变小?如果不用递归,应该如何解决呢?
------Output------
29*6=3*58=174
58*3=6*29=174
39*4=2*78=156
78*2=4*39=156
import java.util.*;
public class Equation{
public static void main(String[] args){
final int N = 9;
int[] num = new int[N];
for(int i = 0; i < N; i++){
num[i] = i+1;
}
rank(num, num.length-1);
}
/**
* 验证算式##*#=#*##=###
* 一共三个表达式
*/
public static void confirmEquation(int[] arr){
int x1 = arr[0]*10+arr[1];
int x2 = arr[2];
int x3 = arr[3];
int x4 = arr[4]*10+arr[5];
int x5 = arr[6]*100+arr[7]*10+arr[8];
if(x1*x2 == x5 && x3*x4 == x5){
System.out.println(x1 + "*" + x2 + "=" + x3 + "*" + x4 + "=" + x5);
}
}
/**
* 从右向左调整数组元素
* index为正在排序的最大位索引
* 由于此处形参是引用传递,为免影响原数组,开一个新数组进行处理
*/
public static void rank(int[] num, int index){
int temp;
if(index == 0){
confirmEquation(num);
}
else{
for(int i = 0; i <= index; i++){ //i=index则不交换
int[] arr = Arrays.copyOf(num, num.length);
temp = arr[index];
arr[index] = arr[i];
arr[i] = temp;
rank(arr, index-1);
}
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。