我正在尝试解决leetcode中的two sum。我最初的解决方案是:
class Solution {
public int[] twoSum(int[] nums, int target) {
int lnght = nums.length;
int i,j = 0;
for (i = 0; i < lngth -1; i++) {
for (j = 1; j < lngth; j++) {
if (nums[i] + nums[j] == target) {
int[] result = {i,j};
return result;
}
}
}
}
}
但这返回了无法找到“lngth”变量错误,如下所示:
Main.java:13: error: cannot find symbol
for (i = 0; i < lngth -1; i++) {
^
symbol: variable lngth
location: class Solution
Main.java:14: error: cannot find symbol
for (j = 1; j < lngth; j++) {
^
symbol: variable lngth
location: class Solution
2 errors
我设法通过在 for 循环中将 lnght 替换为 nums.length 找到了解决方法。为什么这个有效,而不是我原来的实现?
此外,仅替换变量是行不通的。我必须在 for 循环之后添加一个 return 语句,如下所示:
class Solution {
public int[] twoSum(int[] nums, int target) {
int lnght = nums.length;
int i,j = 0;
for (i = 0; i < nums.length -1; i++) {
for (j = 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) {
int[] result = {i,j};
return result;
}
}
}
int[] result = {i,j};
return result;
}
}
为什么这个有效,而直接从 if 语句内部返回却不起作用?
感谢您的宝贵时间。
正如评论中所说,
lngth != lnght
对于问题的第二部分,我们需要循环外部的 return 语句,而不仅仅是循环内部。考虑未进入循环的情况。