力扣编译执行逻辑的大胆假设
起因
在力扣上面进行刷题,然后将对应的方法复制到本地IDEA中进行编写,由于需要main函数进行调试,因此将对应的全局的成员变量设置为static,这样的话IDEA中进行执行结果正确,发现在力扣执行结果反而不正确了下面是产生的差异图片。
解决
去掉对应的static即可通过
大胆假设
由于static是一个静态内存,同时可以进行复用,这样便猜测了一套有关力扣执行的伪逻辑
验证
1.先不进行提交,直接进行测试
==结果正确==
2. 进行提交
==结果错误==
3. 跳过该用例
res = 5 + 1 + 0 = 6
这里不符合的主要原因在于我自己直接在条件判断直接返回,导致没有对全局变量进行改变,下述代码一致。
==结果错误==
4. 继续验证
res = 5 + 1 + 0 + 2 = 8
==结果错误==
代码验证
static int res = 0;
public static int findTargetSumWays(int[] nums, int target) {
dfs(nums, target, 0, 0);
return res;
}
public static void dfs(int[] nums, int target, int temp, int depth) {
if (depth == nums.length) {
if (temp == target) {
res++;
}
return;
}
dfs(nums, target, temp + nums[depth], depth + 1);
dfs(nums, target, temp - nums[depth], depth + 1);
}
public static void main(String[] args) {
Map<int[], Integer> paramMap = new LinkedHashMap<>();
paramMap.put(new int[]{1, 1, 1, 1, 1}, 3);
paramMap.put(new int[]{1}, 1);
paramMap.put(new int[]{1}, 2);
paramMap.put(new int[]{1, 0}, 1);
paramMap.forEach((k, v) -> {
int num = findTargetSumWays(k, v);
for (int n : k) {
System.out.print(n + "\t");
}
System.out.println("target: " + v);
System.out.println("num: " + num);
System.out.println("res: " + res);
System.out.println("---------------------------------");
});
}
运行结果
这里主要是因为输入的参数采用的是K-V结构,因此这个使用了哈希数据结构。
结论
通过上述的例子可以可以证明我的伪逻辑大体上是符合逻辑的,当然这只是猜想,真正的实现逻辑我并没有真实的看到,希望大家有其他的想法,欢迎和我进行讨论。