我正在研究练习编码问题,我遇到了这个任务。
返回数组中数字的总和,为空数组返回0。除了数字13是非常不吉利的。所以它不计算在13之后立即出现的数字也不计算
我提出了正确的解决方案,但我不确定一件事。
public int sum13(int[] nums)
{
int sum = 0;
for(int i = 0; i < nums.length; i++)
{
if(nums[i] == 13)
i++;
else
sum += nums[i];
}
return sum;
}
在其中一个测试用例中,输出为4,sum13([1,2,13,2,1,13])→4。
我的问题是,在我的“if”语句中,我将计数器递增1.为什么它没有将下一个元素添加到总和中?为什么它跳过下一个元素,即使我只增加1?
答案 0 :(得分:2)
你的问题在这里:
if(nums[i] == 13)
i++;
增加指数没有意义;只是让你在一次迭代中增加你的循环计数器两次!
所以,请继续
if(nums[i] != 13) {
sum += nums[i];
}
相反(没有其他的;并且:更好总是使用{braces};即使它只是一个单行!)
因为你实际上根本不需要那个索引,你可以使用for-each循环样式:
for (int num : nums ) {
if (num != ...
搞乱指数的可能性更小!
答案 1 :(得分:1)
您正在跳过13和之后的数字。您正在递增i
两次。
答案 2 :(得分:0)
此代码可以正常工作:-
public int sum13(int[] nums) {
int sum=0;
for(int i=0;i<=nums.length-1;i++){
if(nums[i]!=13){
sum+=nums[i];
if(i>0 && nums[i-1] == 13)
sum -= nums[i];
}
}
return sum;
}