Javascript
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
var moveZeroes = function(nums) {
var count=0;
for(var i=0;i<nums.length;i++)
{
if(nums[i]===0)
{
nums.splice(i,1);
count++;
i--;
}
}
for(var j=0;j<count;j++)
{
nums.push(0);
}
};
C++和Java的方法没想出来
最优解
思路和我的思路类似,但是它这里条件判断选择的更好,用不等于0做判断,那么可以把后面的数移到前面去,最后再把0补上即可。我想的是记录0的个数,而它记录了非0个数,和数组长度一比也可以算出0的个数,而且这个变量还可以用于数组移位,很巧妙。
C++
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int count=0;
for(int i=0;i<nums.size();i++)
{
if(nums[i]!=0) nums[count++]=nums[i];
}
for(;count<nums.size();count++)
{
nums[count]=0;
}
}
};
Java
public class Solution {
public void moveZeroes(int[] nums) {
if (nums == null || nums.length == 0) return;
int insertPos = 0;
for (int num: nums) {
if (num != 0) nums[insertPos++] = num;
}
while (insertPos < nums.length) {
nums[insertPos++] = 0;
}
}
}