2018-05-20

[LeetCode283]移动零

  • 第一次尝试
class Solution {
    public void moveZeroes(int[] nums) {
        int i,j;
        int s=nums.length;
        int count = 0;
        for(i=0;i<s-1;i++)
            if(nums[i]==0)
            {    count++;
                for(j=i;j<s-1;j++)
                {
                    nums[j]=nums[j+1];
                }
            } 
        for(i=0;i<count;i++)
         {
            nums[s-1-i]=0;
        }
    }  
}

失败案例:

输入【0,0,1】
输出【0,1,0】
预期【1,0,0】

由于没有考虑到连续0的情况,导致没有考虑到移动一次后可能出现nums[0]==0的情况

  • 第二次尝试
public class Solution {
    public void moveZeroes(int[] nums) {
        int i,j;
        int s=nums.length;
        int count = 0;
       for(i=0;i<s;i++)
       {
           if(nums[i]!=0)
           {
               nums[count] = nums[i];
               count ++;
           }
       }
        for(i=count;i<s;i++)
         {
            nums[i]=0;
        }
    }
}

改用count来记录非0的数,然后把非零的数都从位置0开始连续排列,最后把空缺的位置都置0

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容