递归、搜索与回溯-综合练习: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]);
    }
}
相关推荐
专注VB编程开发20年3 分钟前
python运行提速方案全解
java·linux·服务器
涤生大数据7 分钟前
大数据面试高频题:row_number() 数据倾斜到底怎么解决?
java·大数据·面试
weixin_446729167 分钟前
注解和反射
java·开发语言
alphaTao8 分钟前
LeetCode 每日一题 2026/5/18-2026/5/24
python·leetcode
摇滚侠11 分钟前
HashMap 源码解析 底层原理 面试如何回答
java·面试·职场和发展
凯瑟琳.奥古斯特15 分钟前
常见加密算法及应用
java·开发语言·网络·网络协议·职场和发展
devilnumber16 分钟前
java的lambda妙用举例
java·lambda
invicinble20 分钟前
springboot提供的机制大全
java·spring boot·后端
Han_han91921 分钟前
题⽬ 4:订单商品统计:
java
汉克老师29 分钟前
GESP6级C++考试语法知识(二十七、广度优先搜索(二、二维BFS))
c++·算法·图论·宽度优先·广度优先搜索·gesp6级·gesp六级