题解 | #牛圈围栏问题# Java
牛圈围栏问题
https://www.nowcoder.com/practice/4e3bb97bbc2b4382a745abe953f44aee
这个问题可以使用回溯法来解决。我们可以使用递归函数来生成所有可能的围栏组合。在递归过程中,我们需要记录当前已经使用了多少个木棍和铁链,以及当前围栏的状态。当木棍和铁链的数量都达到 n 时,我们就找到了一个稳定的围栏组合。
这题感觉题意很迷, 大意就是生成n对()排列组合, (要先出现
public class Solution { private void backtrack(List<String> res, StringBuilder sb, int left, int right, int n) { if (sb.length() == 2 * n) { res.add(sb.toString()); return; } if (left < n) { sb.append("("); backtrack(res, sb, left + 1, right, n); sb.deleteCharAt(sb.length() - 1); } if (right < left) { sb.append(')'); backtrack(res, sb, left, right + 1, n); sb.deleteCharAt(sb.length() - 1); } } public String[] generateParenthesis (int n) { List<String> res = new ArrayList<>(); backtrack(res, new StringBuilder(), 0, 0, n); return res.toArray(new String[res.size()]); } }
算法题刷刷刷 文章被收录于专栏
数组、链表、栈、队列、堆、树、图等。 查找和排序:二分查找、线性查找、快速排序、归并排序、堆排序等。 动态规划:背包问题、最长公共子序列、最短路径 贪心算法:活动选择、霍夫曼编码 图:深度优先搜索、广度优先搜索、拓扑排序、最短路径算法(如 Dijkstra、Floyd-Warshall) 字符串操作:KMP 算法、正则表达式匹配 回溯算法:八皇后问题、0-1 背包问题 分治算法:归并排序、快速排序