递归、搜索与回溯-综合练习: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]);
    }
}
相关推荐
颜酱16 小时前
单调栈:从模板到实战
javascript·后端·算法
CoovallyAIHub19 小时前
仿生学突破:SILD模型如何让无人机在电力线迷宫中发现“隐形威胁”
深度学习·算法·计算机视觉
CoovallyAIHub20 小时前
从春晚机器人到零样本革命:YOLO26-Pose姿态估计实战指南
深度学习·算法·计算机视觉
CoovallyAIHub20 小时前
Le-DETR:省80%预训练数据,这个实时检测Transformer刷新SOTA|Georgia Tech & 北交大
深度学习·算法·计算机视觉
CoovallyAIHub20 小时前
强化学习凭什么比监督学习更聪明?RL的“聪明”并非来自算法,而是因为它学会了“挑食”
深度学习·算法·计算机视觉
CoovallyAIHub20 小时前
YOLO-IOD深度解析:打破实时增量目标检测的三重知识冲突
深度学习·算法·计算机视觉
华仔啊21 小时前
挖到了 1 个 Java 小特性:var,用完就回不去了
java·后端
SimonKing21 小时前
SpringBoot整合秘笈:让Mybatis用上Calcite,实现统一SQL查询
java·后端·程序员
NAGNIP1 天前
轻松搞懂全连接神经网络结构!
人工智能·算法·面试
NAGNIP1 天前
一文搞懂激活函数!
算法·面试