LeetCode 五月打卡-day14
Posted 王六六的IT日常
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 五月打卡-day14相关的知识,希望对你有一定的参考价值。
691. 贴纸拼词
我们有 n 种不同的贴纸。每个贴纸上都有一个小写的英文单词。
您想要拼写出给定的字符串 target ,方法是从收集的贴纸中切割单个字母并重新排列它们。如果你愿意,你可以多次使用每个贴纸,每个贴纸的数量是无限的。
返回你需要拼出 target 的最小贴纸数量。如果任务不可能,则返回 -1 。
注意:在所有的测试用例中,所有的单词都是从 1000 个最常见的美国英语单词中随机选择的,并且 target 被选择为两个随机单词的连接。
参考题解:
【宫水三叶】DFS + 记忆化搜索 运用题
class Solution
int N = 20, M = 1 << 20, INF = 50;
int[] f = new int[M];
String[] ss;
String t;
int dfs(int state)
int n = t.length();
if (state == ((1 << n) - 1)) return 0;
if (f[state] != -1) return f[state];
int ans = INF;
for (String s : ss)
int nstate = state;
out:for (char c : s.toCharArray())
for (int i = 0; i < n; i++)
if (t.charAt(i) == c && ((nstate >> i) & 1) == 0)
nstate |= (1 << i);
continue out;
if (nstate != state) ans = Math.min(ans, dfs(nstate) + 1);
return f[state] = ans;
public int minStickers(String[] stickers, String target)
ss = stickers; t = target;
Arrays.fill(f, -1);
int ans = dfs(0);
return ans == INF ? -1 : ans;
以上是关于LeetCode 五月打卡-day14的主要内容,如果未能解决你的问题,请参考以下文章