题解 | #有重复项数字的所有排列# go

有重复项数字的所有排列

http://www.nowcoder.com/practice/a43a2b986ef34843ac4fdd9159b69863

go

/**
 * 
 * @param num int整型一维数组 
 * @return int整型二维数组
*/
func permuteUnique( num []int ) [][]int {
    // write code here
    if len(num) == 0 {
        return nil
    }

    sort.Ints(num)

    ret := make([][]int, 0)
    m := make([]bool, len(num))
    path := make([]int, 0)

    var do func(path []int)
    do = func(path []int) {
        if len(path) == len(num) {
            tmp := make([]int, len(num))
            copy(tmp, path)
            ret = append(ret, tmp)
            return
        }

        for i:=0; i < len(num); i++{
//          关键是这里
//           m[i] 为true 说明该值已经使用过了
//          i>0 && num[i] == num[i-1] && !m[i-1]
//             说明 i-1 值与当前相等, 并且已经在其他路径使用过了
            if m[i] || i>0 && num[i] == num[i-1] && !m[i-1] {
                continue
            }

            m[i] = true
            path = append(path, num[i])

            do(path)

            m[i] = false
            path = path[:len(path)-1]
        }
    }

    do(path)

    return ret
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 12:19
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务