Leetcode 494 蛮力递归解决方案将变量作为属性使用,但当我将其作为参数传递时不起作用

Posted

技术标签:

【中文标题】Leetcode 494 蛮力递归解决方案将变量作为属性使用,但当我将其作为参数传递时不起作用【英文标题】:Leetcode 494 Brute force recursive solution works with a variable as a attribute but doesn't work when I pass it as parameter 【发布时间】:2021-12-26 14:11:26 【问题描述】:

我已在此处附上解决方案。第一个有效,但第二个无效。唯一的变化是我将结果变量作为具有全局范围的属性移动到了辅助函数中的参数。

class Solution 
    int result = 0;
    
    public int findTargetSumWays(int[] nums, int S) 
        if (nums == null || nums.length == 0) return result;
        helper(nums, S, 0, 0);
        return result;
    
    
    public void helper(int[] nums, int target, int pos, long eval)
        if (pos == nums.length) 
            if (target == eval) result++;
            return;
        
        helper(nums, target, pos + 1, eval + nums[pos]);
        helper(nums, target, pos + 1, eval - nums[pos]);
    

class Solution 
    
    public int findTargetSumWays(int[] nums, int S) 
        int result = 0;
        if (nums == null || nums.length == 0) return result;
        helper(nums, S, 0, 0, result);
        return result;
    
    
    public void helper(int[] nums, int target, int pos, long eval, int result)
        if (pos == nums.length) 
            if (target == eval) result++;
            return;
        
        helper(nums, target, pos + 1, eval + nums[pos], result);
        helper(nums, target, pos + 1, eval - nums[pos], result);
    

【问题讨论】:

【参考方案1】:

原语(如您的情况下的 int )在 Java 中是按值传递的。在您的第一个解决方案中,它是一个类属性。在第二种解决方案中,值在 findTargetSumWays() 中声明,其值在 helper() 中修改。这不能像你实现它的方式那样工作

而不是:

int i=0;
modifyValue(i);

应该是:

int i=0;
i = modifyValue(i);

【讨论】:

快速跟进:这意味着属性或类字段作为参考传递,就像在更新属性结果的第一个解决方案中一样?

以上是关于Leetcode 494 蛮力递归解决方案将变量作为属性使用,但当我将其作为参数传递时不起作用的主要内容,如果未能解决你的问题,请参考以下文章

leetcode 494. 目标和

LeetCode 494. 目标和

如何避免在递归中使用全局/类级别变量?

leetcode 494. Target Sum

leetcode494

[LeetCode] 494. Target Sum