【每日一题0609】已知一个由数字组成的列表,请将列表中的所有0移到右侧

已知一个由数字组成的列表,请将列表中的所有0移到右侧。
例如 move_zeros([1, 0, 1, 2, 0, 1, 3]) ,预期返回结果: [1, 1, 2, 1, 3, 0, 0]

附录力扣原题:
image

1 Like

取巧的实现方法:
image
备注:
key使用的是bool的方式排序,在Python中 0为False ,1为 True

1 Like

蚊子老师的解法一:
image

解法二:
image

小佛学委解法:
image

1 Like

move_zeros=[1, 0, 1, 2, 0, 1, 3]
a = len(move_zeros)
for i in range(a):
for j in range(0,a-1):
if move_zeros[j]==0:
move_zeros[j],move_zeros[j+1] = move_zeros[j+1],move_zeros[j]
print(move_zeros)

def move_zeros(sss: list):
    for i in range(len(sss) - 1):
        if sss[i] == 0: #判断是否是0
            sss.remove(sss[i]) #如果是则删除0
            sss.append(0)  #在最后追加0
    return sss

assert move_zeros([0, 1, 0, 3, 12]) == [1, 3, 12, 0, 0]
assert move_zeros([0, 0, 0, 3, 12]) == [3, 12, 0, 0, 0]
assert move_zeros([1, 5, 2, 3, 12]) == [1, 5, 2, 3, 12]

image

用的是冒泡排序,思路比较凌乱,但结果是正确的。
代码仅限于此题,换另一个题目就不适用了。局限性太大

麻烦老师们看看对不对,有没有可以完善的地方

#将列表中的0元素移至最右
def move_zero(list_a):
    num=0
    res=[]
    for i in range(len(list_a)):
        if list_a[i]!=0:
            res.append(list_a[i])
            num=num+1
    for i in range(len(list_a)-num):
        res.append(0)
    return res


assert move_zero([0, 1, 0, 3, 12])==[1,3,12,0,0]

用冒泡法冒个泡~

def moveZeroes(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        for i in range(len(nums)-1):
            for j in range(0,len(nums)-i-1):
                if nums[j] == 0:
                    nums[j],nums[j+1] = nums[j+1],nums[j]

用双指针法再优化一下,冒泡法用的时间和空间太多了~

class Solution:
    def moveZeroes(self, nums: List[int]) -> None:
        # 用于记录位置的指针
        j = 0
        for i in range(len(nums)):
            # 不是0的话就跟记录的指针交换位置:让数字往前移
            if nums[i]!=0:
                nums[j],nums[i] = nums[i],nums[j]
                # 已经完成好交换位置
                j += 1
        
        # 指针j会因为nums[i]==0 导致 j跟len(nums)是相等的,那么需要把j后面的位置让0补上
        for i in range(j,len(nums)):
            nums[j] = 0

一个字:绝

    public List<Integer> moveZero(List<Integer> integerList) {
        int count = 0;
        for (int i = 0; i < integerList.size(); i++) {
            if (integerList.get(i) == 0) {
                integerList.remove(i);
                count++;
            }
        }
        for (int i = 0; i < count; i++) {
            integerList.add(0);
        }
        return integerList;
    }
关闭