例如:1 + 2 + 34–5 + 67–8 + 9 = 100。
递归求解.
private void computeInt(StringBuffer sb, int i, int res, int n, int sign){
sb.append(i);
n = n * 10 + i;
if(i == 9){
if(res + sign * n == 100)
System.out.println(sb);
deleteLast(sb);
return;
}
// first case: no '+' or '-' appended
computeInt(sb, i + 1, res, n, sign);
if(getLast(sb) == '+' || getLast(sb) == '-')
return;
res += sign * n;
// second case: '+' appended
sb.append('+');
computeInt(sb, i + 1, res, 0, 1);
// third case: '-' appended
replaceLast(sb, '-');
computeInt(sb, i + 1, res, 0, -1);
deleteLast(sb);
deleteLast(sb);
}
@Test
public void compute(){
computeInt(new StringBuffer(), 1, 0, 0, 1);
}
private char getLast(StringBuffer sb){
return sb.charAt(sb.length() - 1);
}
private void deleteLast(StringBuffer sb){
sb.deleteCharAt(sb.length() - 1);
}
private void replaceLast(StringBuffer sb, char c){
sb.setCharAt(sb.length() - 1, c);
}
3 回答1.1k 阅读✓ 已解决
1 回答976 阅读✓ 已解决
4 回答765 阅读
1 回答844 阅读
1 回答877 阅读
1 回答641 阅读
1 回答594 阅读