Title description:
Solution idea: backtracking method
Such as the natural number 3 :
Code: Java language
List<String> ans = new ArrayList<>(); // 记录答案
StringBuilder sb = new StringBuilder(); // 记录路径
/**
*
* @param num 表示要求的自然数
* @param sum 递归中的表达式的和
* @param index 表示下一次递归的起始位置
*/
void getAdditionExpression(int num,int sum, int index){
//递归终止条件
if(sum > num) return;
if(sum == num){
//记录答案
ans.add(sb.substring(0, sb.length() - 1)); // 去除sb最后一位: "+"
return;
}
for(int i = index; i < num; i++){
sum += i;
sb.append(i).append("+");
getAdditionExpression(num, sum, i); // 此处的 i 表示下一次递归还是从 i 开始,因为每个数可以重复使用。
//回溯
sb.deleteCharAt(sb.length() - 1).deleteCharAt(sb.length() - 1);
sum -= i;
}
}