logoProsperBao

Subsequence

2022-04-29 08

题目来源(type-challenges)

问题

type case1 = Subsequence<[1, 2]> // [] | [1] | [2] | [1, 2]
type case2 = Subsequence<[1, 2, 3]> // [] | [1] | [2] | [1, 2] | [3] | [1, 3] | [2, 3] | [1, 2, 3] 

解答

type Subsequence<T> = T extends [infer One, ...infer Rest] ? [One] | [...Subsequence<Rest>] | [One, ...Subsequence<Rest>] : []

拆分

  1. 通过拆分数组得到第一个元素和剩下所有的元素
  2. 通过组合第一个单独元素和递归拆分剩下的元素和包含当前元素且也递归拆分剩下的元素
  3. 组成成子序列,是有顺序的