首页 > 解决方案 > LC494 Brute force recursive sol 使用变量作为属性但不能作为参数工作这意味着类属性作为参数传递?

问题描述

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

问题:我知道在第二种情况下,我没有更新作为参数传递的结果,因为我没有像这样更新结果变量:

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

这是否意味着属性或类字段是通过引用传递的,就像在第一个解决方案中一样?

溶胶1:

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]);
    }
}

溶胶2:

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);
    }
}

标签: javarecursionparametersscopepass-by-reference

解决方案


推荐阅读