题目要求在 N 个卡片组中各选一张卡片,按组号顺序拼成一个长度为 N 的字母序列,且序列中不能出现相同字母。需要统计所有不同的合法序列个数。
由于 N≤6,每组卡片数不超过 8,总搜索空间很小,可以使用深度优先搜索(DFS)回溯枚举所有可能的序列,并通过以下两点保证正确性:
used,记录当前路径上每个字母是否已被使用。只有当前卡片上的字母未被使用时,才允许将其加入序列,并继续向下一组搜索。"aab"),直接枚举会生成多条相同的序列。为了避免重复计数,需要将所有构造出的序列存入一个集合 seen 中(如哈希集合),最后以集合的大小作为答案。也可以在每组内部先对字符去重,但全局去重更加通用。梦梦在玩一个组合游戏。她有 N 个卡片组,编号从 1 到 N。每个组里有若干张卡片,每张卡片上印着一个小写英文字母 a∼z,同一组内的字母可以重复。
她需要从第 1 组到第 N 组依次各挑选一张卡片,并将这些卡片上的字母按组号顺序拼接成一个长度为 N 的字母序列。梦梦希望这个序列中的字母互不相同,即不能出现相同的字母。
请你计算共有多少种不同的字母序列能够被拼出。两个序列只要在任意位置上的字母不同,就视为不同的序列。
约束:
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册