循环判断,是0则后面的数都左移一位,最后一位置零。
void moveZeroes(int* nums, int numsSize) {
int i=0,j,sum=0;
while(i<numsSize-sum)//sum记录0的个数,当循环到后面的数都是0时,结束循环。
{ if(nums[i]==0)
{for(j=i;j<numsSize-1-sum;j++)
nums[j]=nums[j+1];
nums[numsSize-sum-1]=0;
sum++;
i=0; //每次移动一遍之后,又要从第一个开始判断
}
else {i++;}
}
return nums;
}
搜到的更简单的解法:
让K = 0,然后依次找数组中不是0的数字,依次赋值在K处。再把从K开始,到数组尾部的位置赋值为0。
void moveZeroes(int* nums, int numsSize) {
int k=0;
for(int i=0;i<numsSize;i++){
if(nums[i]!=0){
nums[k++]=nums[i];
}
}
for(;k<numsSize;k++){
nums[k]=0;
}
return nums;
}