9数算式
观察如下的算式:
9213 x 85674 = 789314562
左边的乘数和被乘数正好用到了1~9的所有数字,每个1次。
而乘积恰好也是用到了1~9的所有数字,并且每个1次。
请你借助计算机的强大计算能力,找出满足如上要求的9数算式一共有多少个?
注意:
1. 总数目包含题目给出的那个示例。
2. 乘数和被乘数交换后作为同一方案来看待。
代码示例:
/**
* 全排列问题(深度搜索字典序)
*
* @author Swing
*
*/
public class Main {
char[] arr = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
// 每种可能的结果输出数组
char[] result = new char[arr.length];
// 标记数组,记录数字是否被用过(1为用过)
int[] tagArray = new int[arr.length];
int count = 0;
/**
* DFS
*
* @param layer
* 深度
*/
public void fullPermutation(int layer) {
// 递归到最后一层的下一层,打印
if (layer > arr.length - 1) {
String string = new String(result);
if (!string.startsWith("0") && !string.endsWith("0")) {
String[] strings = string.split("0");
int a = Integer.parseInt(strings[0]);
int b = Integer.parseInt(strings[1]);
int c = a * b;
if (check(c))
count++;
}
} else {
for (int i = 0; i < arr.length; i++) {
// 如果此数在本次深度下未使用过
if (tagArray[i] == 0) {
tagArray[i] = 1;
result[layer] = arr[i];
fullPermutation(++layer);
tagArray[i] = 0;
layer--;
}
}
}
}
/**
* 检查结果数是否满足条件
*
* @param num
* @return
*/
public boolean check(int num) {
String string = new Integer(num).toString();
for (int i = 1; i < 10; i++) {
String s = new Integer(i).toString();
if (!string.contains(s))
return false;
}
return true;
}
public static void main(String[] args) {
Main main = new Main();
main.fullPermutation(0);
System.out.println(main.count / 2);
}
}