返回数组中数字的总和,除了忽略以6开头并延伸到下一个7的数字部分(每6个后跟至少7个)。返回0表示没有数字。
sum67([1, 2, 2]) → 5
sum67([1, 2, 2, 6, 99, 99, 7]) → 5
sum67([1, 1, 6, 7, 2]) → 4
答案 0 :(得分:0)
我看了你的代码,你应该解决一些问题:
如果有可能在数组结束后6之后不存在7,则应检查i<nums.length
。
您还应该在i<nums.length
之前检查sum = sum+nums[i];
,因为7可以是数组中的最后一个元素,而您的索引现在已经超过了数组的最后一个元素。事实上,如果你不进行检查,你的第二个例子就会得到ArrayIndexOutOfBoundsException
。
sum = sum+nums[nums.length-1];
没有必要。你怎么知道它应该包含在你的金额中?
修正上述要点后,您的代码应如下所示:
public static int sum67( int[] nums)
{
int sum = 0;
if(nums.length==0)
return 0;
if(nums.length==1)
return nums[0];
int i ;
for(i=0;i<nums.length;i++)
{
if(nums[i]==6)
{
i++;
while(i<nums.length && nums[i]!=7)
{
i++;
}
i++;
}
if(i<nums.length)
{
sum = sum+nums[i];
}
}
return sum;
}
然而,它有点乱,可以重构。我认为下面的代码要好得多。
public static int sum67( int[] nums)
{
int sum = 0;
boolean add = true;
for( int i = 0; i < nums.length; i++)
{
if( add && nums[i] == 6 || !add && nums[i] == 7)
{
add = !add;
continue;
}
if( add)
sum += nums[i];
}
return sum;
}