-4

所以问题是:返回数组中数字的总和,除了忽略以 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

我的尝试:

public int sum67(int[] nums) {
  int sum = 0;
  for(int i=0;i<nums.length;i++){
    if(nums[i] == 6){
      while(nums[i] == 7){
        i++;
      }
    }
    else{
      sum = sum + nums[i];
    }
  }
  return sum;
}
4

3 回答 3

1

我给你一个提示。以下内容不太正确:

  while(nums[i] == 7){
于 2013-04-04T10:14:54.357 回答
1

这个循环永远不会运行,因为n[i]是六个:

while(nums[i] == 7){
    i++;
}

它应该是

while(nums[i] != 7){
    i++;
}

有一种方法可以避免内部循环,并使用单个循环解决问题,如下所示:

boolean seenSix = false;
for(int i=0;i<nums.length;i++){
    if (!seenSix) {
        if(nums[i] != 6) {
            sum[i] += n[i];
        } else {
            seenSix = true;
        }
    } else {
        seenSix = (n[i] != 7);
    }
}
于 2013-04-04T10:14:59.170 回答
1

尝试

while(nums[i] != 7){
    i++;
}
于 2013-04-04T10:15:10.093 回答