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

有重复项数字的全排列

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

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param num int整型一维数组 
     * @return int整型二维数组
     */
    var prefixStrArr = [String]()
    func permuteUnique( _ num: [Int]) -> [[Int]] {
        if let arr = sortNums(prefix:"", num: num) {
            return arr
        } else {
            return [[Int]]()
        }
    }
    
    func sortNums(prefix:String, num: [Int]) -> [[Int]]? {
        var nums = num.sorted(by: <)
        if !prefixStrArr.contains(prefix) {
            prefixStrArr.append(prefix)
        } else {
            return nil
        }
        if nums.count == 1 {
            var arr = [[Int]]()
            arr.append([nums[0]])
            return arr
        }
        // 保持位置不变,跟后面的每个交换位置 2种情况
        // 看看之前有没有排序
        
        var totalArr = [[Int]]()
        for i in 0 ... nums.count - 1 {
            (nums[0], nums[i]) = (nums[i], nums[0])
            var prefix = prefix + "\(nums[0])"
            if let arr = sortNums(prefix:prefix, num:Array(nums[1 ... nums.count - 1])) {
                insertArr(&totalArr, arr, nums[0])
            }
            (nums[0], nums[i]) = (nums[i], nums[0])
        }
        return totalArr
    }
    
    func insertArr(_ totalArr:inout [[Int]],_ arr:[[Int]],_ addNum:Int) {
        for value in arr {
            var row = value
            row.insert(addNum, at: 0)
            totalArr.append(row)
        }
    }
}

全部评论

相关推荐

醒工硬件:1学校那里把xxxxx学院去了,加了学院看着就不像本校 2简历实习和项目稍微精简一下。字太多,面试官看着累 3第一个实习格式和第二个实习不一样。建议换行 4项目描述太详细了,你快把原理图贴上来了。比如可以这样描述:使用yyyy芯片,使用xx拓扑,使用pwm控制频率与占空比,进行了了mos/电感/变压器选型,实现了xx功能 建议把技术栈和你做的较为有亮点的工作归纳出来 5熟悉正反激这个是真的吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务