递归、搜索与回溯-综合练习:19.目标和

题目链接:494. 目标和(中等)

算法原理:

解法:递归

Java代码:

java 复制代码
/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 王洋
 * Date: 2025-10-02
 * Time: 23:31
 */
class Solution {
    //自己写了一遍之后找豆包改的,注释处是改动点
    int[] path;
    int ret,n;
    public int findTargetSumWays(int[] nums, int target) {
        path=new int[nums.length];
        ret=0;n=0;
        dfs(nums,target);
        return ret;
    }
    public void dfs(int[] nums,int target){
        if(n==nums.length){//不是path.length==nums.length因为这一直成立
            int sum=0;
            for(int x:path) sum+=x;
            if(sum==target) ret++;
            return ;
        }
        //加号
        path[n]=nums[n++];
        dfs(nums,target);
        n--;//无需手动置为0:path[n--]=0;因为如果dfs时已经满足返回条件,那这一句就会数组越界
        //减号
        path[n]=-nums[n++];
        dfs(nums,target);
        n--;//回溯到当前索引
    }
    //吴小哲教的path全局变量写法
    int ret,aim,path;
    public int findTargetSumWays(int[] nums, int target) {
        ret=0;aim=target;
        dfs(nums,0);
        return ret;
    }
    public void dfs(int[] nums,int pos){
        if(pos==nums.length){
            if(path==aim) ret++;
            return ;
        }
        //加法
        path+=nums[pos];
        dfs(nums,pos+1);
        path-=nums[pos];//恢复现场
        //减法
        path-=nums[pos];
        dfs(nums,pos+1);
        path+=nums[pos];//恢复现场
    }
    //吴小哲教的path局部变量写法
    int ret,aim;
    public int findTargetSumWays(int[] nums, int target) {
        ret=0;aim=target;
        dfs(nums,0,0);
        return ret;
    }
    public void dfs(int[] nums,int pos,int path){
        if(pos==nums.length){
            if(path==aim) ret++;
            return ;
        }
        //加法
        dfs(nums,pos+1,path+nums[pos]);
        //减法
        dfs(nums,pos+1,path-nums[pos]);
    }
}
相关推荐
乐启国际旅行社有限公司8 分钟前
Java线程池实战:文旅系统批量任务性能优化(团期生成/数据导出)
java·开发语言·性能优化
Listen·Rain17 分钟前
用AI开发出一个AI
java·人工智能·spring boot·tomcat·intellij-idea·mybatis·visual studio
AI人工智能+电脑小能手18 分钟前
【大白话说Java面试题 第203题】【09_Zookeeper篇】第4题:ZooKeeper 的节点类型有哪些?
java·zookeeper·分布式锁·分布式协调·znode
会编程的土豆21 分钟前
LeetCode 热题 HOT100(一):哈希表与双指针入门(Go 实现)
算法·leetcode·职场和发展
学习中.........25 分钟前
并行 BPE 训练 与 手写 `Tokenizer`
人工智能·算法·机器学习·语言模型
宸津-代码粉碎机28 分钟前
告别手动Jar部署!生产级无损热部署方案,彻底解决OOM与更新失效问题
java·大数据·开发语言·人工智能·python
米码收割机29 分钟前
【移动】线上购物移动端网站(源码+文档)【独一无二】
java·开发语言·前端·python·django
科学实验家38 分钟前
动态规划2
算法·动态规划
无敌秋44 分钟前
python/c++/java上云
java·c++·python
都叫我大帅哥1 小时前
BCrypt 还是 Argon2?Spring Security 密码加密方案深度解析与实战对比
java·spring