输入:n = 3
输出:[“((()))”,“(()())”,“(())()”,“()(())”,“()()()”]
提示:
1 <= n <= 8
思路:
把
"("
当成+1
,")"
当成-1
,和为0
且个数为2*n
时即是答案
- 加入左括号,尝试每一种可能
- 加入右括号,尝试每一种可能
class Solution {
public:
vector ans;
string cur;
int n;
char left = ‘(’, right = ‘)’;
vector generateParenthesis(int n) {
this->n = n;
dfs(0, 0);
return ans;
}
void dfs(int count, int sum) {
// 如果个数超过2 * n or 左括号在前 or 右括号>n个 就不是有效括号组合
if(count > 2 * n || sum < 0 || sum > n) return ;
if(count == 2 * n && sum == 0) {
ans.emplace_back(cur);
return ;
}
// 尝试加入左括号
cur.push_back(left);
dfs(count + 1, sum + 1);
cur.pop_back();
// 尝试加入右括号
cur.push_back(right);
dfs(count + 1, sum - 1);
cur.pop_back();
}
};
=============================================================================
题目:
给定一个字符串 s ,请将 s 分割成一些子串,使每个子串都是 回文串 ,返回 s 所有可能的分割方案。
回文串 是正着读和反着读都一样的字符串。
示例:
输入:s = “google”
输出:[[“g”,“o”,“o”,“g”,“l”,“e”],[“g”,“oo”,“g”,“l”,“e”],[“goog”,“l”,“e”]]
提示:
-
1 <= s.length <= 16
-
s
仅由小写英文字母组成
思路:
本题的递归树模型是一棵多叉树,图片来自力扣liweiwei1419大佬
如图所示
- 如果前缀字符串是回文,则可以产生分支和结点;
- 如果前缀字符串不是回文,则不产生分支和结点,这一步是剪枝操作。
在叶子结点是空字符串的时候结算,此时 从根结点到叶子结点的路径,就是结果集里的一个结果,使用深度优先遍历,记录下所有可能的结果。
class Solution {
public:
vector<vector> ans;
vector cur;
int n;
vector<vector> partition(string s) {
n = s.length();
dfs(s, 0);
return ans;
}
void dfs(string& s, int index) {
// 到结尾查完了,将结果加入ans
if(index == n) {
ans.emplace_back(cur);
return ;
}
// 将从index开始的字符串都查一遍,是回文串的话就从下一个字符继续判断查找
for(int i = index; i < n; i++) {
if(isPalindrome(s, index, i)) {
cur.emplace_back(s.substr(index, i - index + 1));
dfs(s, i + 1);
cur.pop_back();
}
}
}
// 判断回文串
bool isPalindrome(string& s, int l, int r) {
while(l < r) {
if(s[l++] != s[r–]) return false;
}
return true;
}
};
==========================================================================
题目:
给定一个只包含数字的字符串 s ,用以表示一个 IP 地址,返回所有可能从 s 获得的 有效 IP 地址 。你可以按任何顺序返回答案。
有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 ‘.’ 分隔。
例如:“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址,但是 “0.011.255.245”、“192.168.1.312” 和 “192.168@1.1” 是 无效 IP 地址。
示例:
输入:s = “25525511135”
输出:[“255.255.11.135”,“255.255.111.35”]
提示:
-
0 <= s.length <= 3000
-
s
仅由数字组成
最后
小编精心为大家准备了一手资料
以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
【附】架构书籍
- BAT面试的20道高频数据库问题解析
- Java面试宝典
- Netty实战
- 算法
BATJ面试要点及Java架构师进阶资料
1714413575995)]
以上Java高级架构资料、源码、笔记、视频。Dubbo、Redis、设计模式、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术
【附】架构书籍
- BAT面试的20道高频数据库问题解析
- Java面试宝典
- Netty实战
- 算法
[外链图片转存中…(img-dJcUI7Dr-1714413575996)]
BATJ面试要点及Java架构师进阶资料
[外链图片转存中…(img-SsQJBbbT-1714413575996)]