题解 | #数字字符串转化成IP地址#
数字字符串转化成IP地址
https://www.nowcoder.com/practice/ce73540d47374dbe85b3125f57727e1e
class Solution {
vector<string> ans;
public:
/**
*
* @param s string字符串
* @return string字符串vector
*/
vector<string> restoreIpAddresses(string s) {
// write code here
dfs(s, 0, 0, "");
return ans;
}
// u是搜索的字符串的位置,k是已经划分的数字个数
void dfs(string& s, int u, int k, string path) {
if (u == s.size()) {
if (k == 4) { // 当正好搜索完字符串并且数字个数为4时
path.pop_back(); // 把末尾的‘.’去掉
ans.push_back(path);
}
}
if (k == 4) return; // 剪枝
for (int i = u, t = 0; i < s.size(); i++) {
// 如果搜索的第一位是0,则只允许当作0看待,其他情况当作前导0直接break
if (i > u && s[u] == '0') {
break;
}
t = t * 10 + s[i] - '0';
if (t <= 255)
dfs(s, i + 1, k + 1, path + s.substr(u, i - u + 1) + '.');
}
}
};
- 思路:暴搜
- 1、暴搜划分数字的方法
- 2、当当正好搜索完字符串并且数字个数为4时,加入结果中
- 3、注意前导0问题
- 4、只有当数字在0~255范围内才有效
- 时间复杂度:O(C(3, n - 1))
- 空间复杂度:O(不好说)
查看20道真题和解析
