LeetCode75-06:移动零

移动零

LeetCode75-06:移动零_第1张图片

初版(bug)

func moveZeroes(nums []int)  {
    if len(nums) == 1{
        return
    }
    // 设置两个指针fp1,fp2分别指向第一个元素和第二个元素,
    // 两种情况
    // 假如指针fp1指向元素为零
    // 1) *fp2!=0,则交换。
    // 2) *fp2=0,则fp2后移,直至*fp2!=0,与fp1交换

    // 假如指针fp1指向元素为不为零:
    // 1) *fp2=0,则fp1与fp2后移,变成第一种情况;
    // 2) *fp2!=0,fp1与fp2后移...
    temp := 0
    fp1, fp2 := 0, 1
    for _, _ = range nums{
        if fp2 == len(nums){
            break
        }
        if nums[fp1] == 0{
            if nums[fp2] != 0{
                temp = nums[fp1]
                nums[fp1] = nums[fp2]
                nums[fp2] = temp
                fp1++
                fp2++
                continue
            }else{
                fp2++
                temp = nums[fp1]
                nums[fp1] = nums[fp2]
                nums[fp2] = temp
                fp1++
             continue
            }  
        }else{
                fp1++
                fp2++
                continue
            }
        }
}    

可读性

func moveZeroes(nums []int) {
    if len(nums) == 1 {
        return
    }
    fp1, fp2 := 0, 1
    for fp2 < len(nums) {
        if nums[fp1] != 0 {
            fp1++
            fp2++
            continue
        }
        if nums[fp2] != 0 {
            nums[fp1], nums[fp2] = nums[fp2], nums[fp1]
            fp1++
        }
        fp2++
    }
}

你可能感兴趣的:(leetcode,算法,数据结构)