计算自然数的表达式

题目描述:

在这里插入图片描述


解决思路:回溯法

如自然数3

在这里插入图片描述


代码:Java语言

 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;
     }
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值