看下面的算式: □□ x □□ = □□ x □□□ 它表示:两个两位数相乘等于一个两位数乘以一个三位数。
如果没有限定条件,这样的例子很多。 但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。 该算式中1至9的每个数字出现且只出现一次!
比如:
46 x 79 = 23 x 158
54 x 69 = 27 x 138
54 x 93 = 27 x 186 …..
请编程,输出所有可能的情况!
注意:左边的两个乘数交换算同一方案,不要重复输出!
这道题乍一看可以用暴力破解去解,九层循环,然而没那么简单,题干要求算式中1至9的每个数字出现且只出现一次!这种方法不可取啊!
我们想: 单单看九个方块的排列情况,而且不能出现相同的数字,假设第一个位置为start,从第一个位置开始到end,共9种情况,start每向前移动一次,排列情况就减少一次,最后start=end时,就一种排列啊,很明显要用递归去解!
还记得我们以前说的吗,递归要找三点:
- 递归结束条件start==end
- 递归变换start+1
- 递归条件就是start!=end
import java.util.ArrayList;
import java.util.List;
public class 猜算式 {
static List<String> lis=new ArrayList<String>();//结果1(有重复的结果)
static List<String> lis2=new ArrayList<String>();//结果2(去重复后的结果)
//初始化数组为1~9
public