网站建设实训报告2000字,福田欧辉官网,电商网站开发需求文档,wordpress 跳转 计数复原 IP 地址 中等 1.4K 相关企业 有效 IP 地址 正好由四个整数#xff08;每个整数位于 0 到 255 之间组成#xff0c;且不能含有前导 0#xff09;#xff0c;整数之间用 ‘.’ 分隔。
例如#xff1a;“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址#xff0c;但…复原 IP 地址 中等 1.4K 相关企业 有效 IP 地址 正好由四个整数每个整数位于 0 到 255 之间组成且不能含有前导 0整数之间用 ‘.’ 分隔。
例如“0.1.2.201” 和 “192.168.1.1” 是 有效 IP 地址但是 “0.011.255.245”、“192.168.1.312” 和 “192.1681.1” 是 无效 IP 地址。 给定一个只包含数字的字符串 s 用以表示一个 IP 地址返回所有可能的有效 IP 地址这些地址可以通过在 s 中插入 ‘.’ 来形成。你 不能 重新排序或删除 s 中的任何数字。你可以按 任何 顺序返回答案。
示例 1
输入s “25525511135” 输出[“255.255.11.135”,“255.255.111.35”] 示例 2
输入s “0000” 输出[“0.0.0.0”] 示例 3
输入s “101023” 输出[“1.0.10.23”,“1.0.102.3”,“10.1.0.23”,“10.10.2.3”,“101.0.2.3”]
提示
1 s.length 20 s 仅由数字组成
class Solution {
private:static constexpr int SEG_COUNT 4;
private:vectorstring ans;vectorint segments;public:void dfs(const string s, int segId, int segStart) {// 如果找到了 4 段 IP 地址并且遍历完了字符串那么就是一种答案if (segId SEG_COUNT) {if (segStart s.size()) {string ipAddr;for (int i 0; i SEG_COUNT; i) {ipAddr to_string(segments[i]);if (i ! SEG_COUNT - 1) {ipAddr .;}}ans.push_back(move(ipAddr));}return;}// 如果还没有找到 4 段 IP 地址就已经遍历完了字符串那么提前回溯if (segStart s.size()) {return;}// 由于不能有前导零如果当前数字为 0那么这一段 IP 地址只能为 0if (s[segStart] 0) {segments[segId] 0;dfs(s, segId 1, segStart 1);return;}// 一般情况枚举每一种可能性并递归int addr 0;for (int segEnd segStart; segEnd s.size(); segEnd) {addr addr * 10 (s[segEnd] - 0);if (addr 0 addr 0xFF) {segments[segId] addr;dfs(s, segId 1, segEnd 1);} else {break;}}}vectorstring restoreIpAddresses(string s) {segments.resize(SEG_COUNT);dfs(s, 0, 0);return ans;}
};