题目:凑平方数
把0~9这10个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的。
比如:0, 36, 5948721
再比如:
1098524736
1, 25, 6390784
0, 4, 289, 15376
等等…
注意,0可以作为独立的数字,但不能作为多位数字的开始。
分组时,必须用完所有的数字,不能重复,不能遗漏。
如果不计较小组内数据的先后顺序,请问有多少种不同的分组方案?
注意:需要提交的是一个整数,不要填写多余内容。
答案:
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Set;
public class Main
{
// 保存10位以内所有的平方数,方便进行全排列
static ArrayList<BigInteger> digitlist;
// 在深度优先搜索过程中标记digitlist中数字是否被选
public static boolean[] select;
// 保存所有的结果用集合去重,题目要求说生成的序列是无序的
public static Set<Set<String>> result = new HashSet<>();
// 检查当前字符串是否有相同字符
public static boolean check(String digitstr)
{
int len = digitstr.length();
Set<Character> set = new HashSet<>();
for (int i =