Expressions that Compute Natural Numbers

Title description:

insert image description here


Solution idea: backtracking method

Such as the natural number 3 :

insert image description here


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;
     }
 }

Guess you like

Origin blog.csdn.net/qq_51134950/article/details/127741718