何时将 -1 添加到数组递归?
When to add -1 to array recursion?
有一件事我看不懂,什么时候需要加-1
到arr.length
什么时候不需要加-1
?
例如,如果我添加 -1
:
,此代码将只工作
public boolean array220(int[] nums, int index) {
if(index >= nums.length - 1)
return false;
if(nums[index] * 10 == nums[index + 1])
return true;
return array220(nums, index + 1);
}
如果我不添加
,此代码将只工作-1
:
public int array11(int[] nums, int index) {
if(index >= nums.length)
return 0;
if(nums[index] == 11)
return 1 + array11(nums, index + 1);
return array11(nums, index + 1);
}
由于数组是从零开始的,arr.length
是数组的大小,以元素的数量表示。这意味着最后一个索引位于 arr.length-1
,因为 0
是第一个元素。
没有明确的规则,例如,如果您使用 >=
而不是 >
(或者更常见的是 <=
与 <
,就像在一个简单的for循环)你需要调整你的值。
在第一个示例中,您使用 nums[index]
和 nums[index+1]
.
访问数组元素
由于数组查找值必须是< nums.length
,约束是:
index+1 < nums.length
又名:
index < nums.length - 1
也就是说你的排除逻辑是逆向测试:
if (index >= nums.length - 1)
在第二个例子中,你只访问了nums[index]
,所以:
index < nums.length
排除逻辑如下:
if (index >= nums.length)
如果您的数组为空,则它包含 0 个元素且长度为 0。
如果您的数组在 0 索引中有 1 个元素,则长度为 1。
如果您的数组在 0 和 1 索引中有 2 个元素,则长度为 2。
等等..
我们可以注意到,每个数组的第一个索引都是 0,所以最后一个索引总是 array.length-1。
因此我们可以使用两种方法
- 第一种方法
:如果你想使用 <
所以代码会是这样的(注意最后,i
将等于 array.length-1)
for(int i=0;i<arr.length;i++)
- 秒method:if你想用<=
所以代码会是这样的(注意最后,i
也等于 array.length-1)
for(int i=0;i<=arr.length-1;i++)
有一件事我看不懂,什么时候需要加-1
到arr.length
什么时候不需要加-1
?
例如,如果我添加 -1
:
public boolean array220(int[] nums, int index) {
if(index >= nums.length - 1)
return false;
if(nums[index] * 10 == nums[index + 1])
return true;
return array220(nums, index + 1);
}
如果我不添加
,此代码将只工作-1
:
public int array11(int[] nums, int index) {
if(index >= nums.length)
return 0;
if(nums[index] == 11)
return 1 + array11(nums, index + 1);
return array11(nums, index + 1);
}
由于数组是从零开始的,arr.length
是数组的大小,以元素的数量表示。这意味着最后一个索引位于 arr.length-1
,因为 0
是第一个元素。
没有明确的规则,例如,如果您使用 >=
而不是 >
(或者更常见的是 <=
与 <
,就像在一个简单的for循环)你需要调整你的值。
在第一个示例中,您使用 nums[index]
和 nums[index+1]
.
由于数组查找值必须是< nums.length
,约束是:
index+1 < nums.length
又名:
index < nums.length - 1
也就是说你的排除逻辑是逆向测试:
if (index >= nums.length - 1)
在第二个例子中,你只访问了nums[index]
,所以:
index < nums.length
排除逻辑如下:
if (index >= nums.length)
如果您的数组为空,则它包含 0 个元素且长度为 0。
如果您的数组在 0 索引中有 1 个元素,则长度为 1。
如果您的数组在 0 和 1 索引中有 2 个元素,则长度为 2。
等等..
我们可以注意到,每个数组的第一个索引都是 0,所以最后一个索引总是 array.length-1。
因此我们可以使用两种方法
- 第一种方法 :如果你想使用 <
所以代码会是这样的(注意最后,i
将等于 array.length-1)
for(int i=0;i<arr.length;i++)
- 秒method:if你想用<=
所以代码会是这样的(注意最后,i
也等于 array.length-1)
for(int i=0;i<=arr.length-1;i++)