[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