You are given an array of distinct integers arr and an array of integer arrays pieces, where the integers in pieces are distinct. Your goal is to form arr by concatenating the arrays in pieces in any order. However, you are not allowed to reorder the integers in each array pieces[i].
Return true if it is possible to form the array arr from pieces. Otherwise, return false.
Example 1:
Input: arr = [85], pieces = [[85]]
Output: true
Example 2:
Input: arr = [15,88], pieces = [[88],[15]]
Output: true
Explanation: Concatenate [15] then [88]
Example 3:
Input: arr = [49,18,16], pieces = [[16,18,49]]
Output: false
Explanation: Even though the numbers match, we cannot reorder pieces[0].
Example 4:
Input: arr = [91,4,64,78], pieces = [[78],[4,64],[91]]
Output: true
Explanation: Concatenate [91] then [4,64] then [78]
Example 5:
Input: arr = [1,3,5,7], pieces = [[2,4,6,8]]
Output: false
Note:
根据题意,就是把 pieces 中的元素按照任意顺序拼接起来能够和 arr 一样,那就返回 true ,否则返回 false 。实现起来使用字典类型 d 来存储 pieces 中的每个子列表及其第一个元素,然后遍历 arr 元素用其来获取 d 中的元素,然后将结果拼接起来判断是否相等即可。
class Solution(object):
def canFormArray(self, arr, pieces):
"""
:type arr: List[int]
:type pieces: List[List[int]]
:rtype: bool
"""
res = []
d = {x[0]:x for x in pieces}
for x in arr:
res += d.get(x, [])
return res==arr
Runtime: 40 ms, faster than 15.53% of Python online submissions for Check Array Formation Through Concatenation.
Memory Usage: 13.3 MB, less than 95.24% of Python online submissions for Check Array Formation Through Concatenation.
原题链接:https://leetcode.com/problems/check-array-formation-through-concatenation/