1. 程式人生 > >leetcode 283. 移動零 C語言

leetcode 283. 移動零 C語言

這裡寫圖片描述
迴圈判斷,是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; }