剑指 Offer II 115. 重建序列

注意起始位置。。 有的是从0开始。有的是从 1开始
边的构造。。注意是否是只有两个。。注意是否会有重复的边
有重复的边的话。会造成入度统计出错。所以要用Set避免重复累加
然后这道题的关键点在于 每次找到的入度为0的点是否只有一个 如果只有一个的话。那么最后的结果唯一,这点很难想到

func sequenceReconstruction(_ nums: [Int], _ sequences: [[Int]]) -> Bool {
       
        let len = nums.count
        //构建图,因为sequences里面有像这样的。。 [[1,2],[1,3],[1,2,3]]
        var edges = Array.init(repeating: Set(), count: len + 1)
        var indeg = Array.init(repeating: 0, count: len + 1)
        for info in sequences {
            
            let tempLen = info.count
            for i in 1.. 1 {
                return false
            }
            let v = tempArray.removeLast()
            //相邻点的入度减少1
            for nextV in edges[v]{
                indeg[nextV] -= 1
                if indeg[nextV] == 0 {
                    tempArray.append(nextV)
                }
            }
        }
        return true
      
    }





你可能感兴趣的:(剑指 Offer II 115. 重建序列)