private static StringBuilder result = new StringBuilder("1"); //用于构成串
//判断新组成的串是否满足和为110
public static void cal(String str)
{
int sum = 0;
String[] num = str.split("[+|-]"); //将串中的各个数抽取出来
String[] code = str.split(" \\d"); //得到各个运算符
sum += Integer.valueOf(num[0]); //先将第一个数加上
int n = 0;
for(int i = 0;i < code.length;i++)
{
if(code[i].equals("+"))
{
sum += Integer.valueOf(num[++n]);
}
if(code[i].equals("-"))
{
sum -= Integer.valueOf(num[++n]);
}
}
if(sum == 110)
{
set.add(str);
}
}
public static void combine(int index)
{
if(index == 9)
{
cal(result.toString());
}
else
{
//分三种情况,分别为插入“+”,“-”和不插入任何符号
for(int i = 0;i < 3;i++)
{
//假设i=0时插入“+”
if(i == 0)
{
result.append("+");
combine(index + 1);
result.delete(result.length() - 2,result.length());
}
//假设i=1时插入“-”
if(i == 1)
{
result.append("-");
result.append(index + 1);
combine(index + 1);
result.delete(result.length() - 2,result.length());
}
//假设i=2时什么都不插入
if(i == 2)
{
result.append(index + 1);
combine(index + 1);
result.deleteCharAt(result.length() - 1);
}
}
}
}
public static void main(String[] args)
{
combine(1);
for(String tmp : set)
{
System.out.println(tmp);
}
}
}