有效 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
,用以表示一个 IP 地址,返回所有可能的有效 IP 地址,这些地址可以通过在 s
中插入 '.'
来形成。你 不能 重新排序或删除 s
中的任何数字。你可以按 任何 顺序返回答案。
示例 1:
输入:s = "25525511135" 输出:["255.255.11.135","255.255.111.35"]
思路:此题思路,注意使用insert和erase函数来完成回溯的过程。终止条件为"."为3个时即可进行结果的填充。在回溯时要注意因为将字符串进行了增加,所以递归时需要将+2而非+1。
class Solution {vector<string> result;public:bool isvaild(string& s, int begin, int end) {if (begin > end)return false;if (s[begin] == '0' && begin != end)return false;int num = 0;for (int i = begin; i <= end; i++) {if (s[i] > '9' || s[i] < '0')return false;num = num * 10 + (s[i] - '0');if (num > 255)return false;}return true;}void backtracking(string& s, int point, int number) {if (number == 3) {if (isvaild(s, point, s.size() - 1))result.push_back(s);return;}for (int i = point; i < s.size(); i++) {if (isvaild(s, point, i)) {s.insert(s.begin() + i + 1, '.');number++;backtracking(s, i + 2, number);number--;s.erase(s.begin() + i + 1);}}}vector<string> restoreIpAddresses(string s) {backtracking(s, 0, 0);return result;}
};