题目描述
思路分析
全排列+check
代码实现
package TEST;import java.util.HashSet;
import java.util.Set;class Main{static int[] a = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };static int ans;public static void main(String[] args) {f(0);System.out.println(ans / 2);}// 全排列private static void f(int k) {// 全排列终点if (k == a.length) {// 处理该种排列下所有的乘法可能for (int i = 1; i < a.length; i++) {int x1 = a2i(0, i);int x2 = a2i(i, 9);// 如果乘积也包含了九个数字,ans++if (check(x1 * x2)) {ans++; // 这里没有考虑x1和x2交换顺序的情况,所以最后输出时要除以2}}}// 全排列for (int i = k; i < a.length; i++) {int t = a[i];a[i] = a[k];a[k] = t;f(k + 1);t = a[i];a[i] = a[k];a[k] = t;}}// 判断x是否是一个包含九个数字的数private static boolean check(int x) {String s = x + "";if (s.length() != 9 || s.indexOf('0') > -1) {return false;}Set<Character> set = new HashSet<Character>();for (int i = 0; i < s.length(); i++) {set.add(s.charAt(i));}if (set.size() == 9) {return true;}return false;}// 将a数组[begin,end)转换为整数private static int a2i(int begin, int end) {int res = a[begin];for (int i = begin + 1; i < end; i++) {res *= 10;res += a[i];}return res;}}
答案
1652