我正在尝试解决 Lintcode 设置的问题:给定一个整数数组,找到总和为零的子数组的开始和结束索引。例如:给定一个数组 [-3, 1, 2, -3, 4],返回 [0, 2] 或 [1, 3]。
下面的代码不是这个问题的最佳答案,它只是我第一次尝试解决这个问题,但我不知道它为什么会导致 Java stackoverflow 错误并想弄清楚,所以我决定在这里发布。我还在 Eclipse IDE 中运行代码,它给了我正确的答案。
我使用递归调用实现了这个,也许这是导致堆栈溢出问题的原因,我不确定。
提前感谢您的帮助!
public ArrayList<Integer> subarraySum(int[] nums) {
ArrayList<Integer> list = new ArrayList<Integer>();
if (nums == null || nums.length == 0) return list;
if (nums[0] == 0){
list.add(0);
list.add(0);
return list;
}
for (int i=0;i<nums.length; i++){
calculateSum(i+1, nums, 0-nums[i], list);
if (list.size() != 0){
list.add(0, i);
break;
}
}
return list;
}
private void calculateSum(int start, int[] nums, int target, ArrayList<Integer> list){
if (start == (nums.length - 1)){
if (target != nums[start]){
return;
}else{
list.add(start);
return;
}
}else{
if (target == nums[start]){
list.add(start);
return;
}else{
calculateSum(start+1, nums, target-nums[start], list);
}
}
}