题解 | #有重复项数字的所有排列# 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
}
全部评论

相关推荐

一个菜鸡罢了:哥们,感觉你的简历还是有点问题的,我提几点建议,看看能不能提供一点帮助 1. ”新余学院“别加粗,课程不清楚是否有必要写,感觉版面不如拿来写一下做过的事情,教育经历是你的弱势就尽量少写 2. “干部及社团经历”和“自我评价”删掉 3. 论文后面的“录用”和“小修”啥的都删掉,默认全录用,问了再说,反正小修毕业前肯定能发出来 4. 工作经验和研究成果没有体现你的个人贡献,着重包装一下个人贡献
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务