LeetCode93. Restore IP Addresses

文章目录

一、题目

A valid IP address consists of exactly four integers separated by single dots. Each integer is between 0 and 255 (inclusive) and cannot have leading zeros.

For example, "0.1.2.201" and "192.168.1.1" are valid IP addresses, but "0.011.255.245", "192.168.1.312" and "192.168@1.1" are invalid IP addresses.

Given a string s containing only digits, return all possible valid IP addresses that can be formed by inserting dots into s. You are not allowed to reorder or remove any digits in s. You may return the valid IP addresses in any order.

Example 1:

Input: s = "25525511135"

Output: ["255.255.11.135","255.255.111.35"]

Example 2:

Input: s = "0000"

Output: ["0.0.0.0"]

Example 3:

Input: s = "101023"

Output: ["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]

Constraints:

1 <= s.length <= 20

s consists of digits only.

二、题解

注意c++中字符串的insert方法和erase方法

cpp 复制代码
class Solution {
public:
    vector<string> res;
    bool isValid(string& s,int start,int end){
        if(start > end) return false;
        if(s[start] == '0' && start != end) return false;
        int num = 0;
        for(int i = start;i <= end;i++){
            if(s[i] < '0' || s[i] > '9') return false;
            num = num * 10 + s[i] - '0';
            if(num > 255) return false;
        }
        return true;
    }
    void backtracking(string s,int startIndex,int pointSum){
        if(pointSum == 3){
            if(isValid(s,startIndex,s.size()-1)){
                res.push_back(s);
                return;
            }
        }
        for(int i = startIndex;i < s.size();i++){
            //合法的情况下
            if(isValid(s,startIndex,i)){
                s.insert(s.begin() + i + 1,'.');
                pointSum++;
                backtracking(s,i + 2,pointSum);
                s.erase(s.begin() + i + 1);
                pointSum--;
            }
            else break;
        }
    }
    vector<string> restoreIpAddresses(string s) {
        backtracking(s,0,0);
        return res;
    }
};
相关推荐
敲上瘾6 分钟前
Linux系统C++开发环境搭建工具(三)—— brpc使用指南
linux·c++·分布式·rpc
_dindong14 分钟前
牛客101:递归/回溯
数据结构·c++·笔记·学习·算法·leetcode·深度优先
AA陈超25 分钟前
虚幻引擎5 GAS开发俯视角RPG游戏 P06-31 映射标签到属性
c++·游戏·ue5·游戏引擎·虚幻
刃神太酷啦34 分钟前
力扣校招算法通关:双指针技巧全场景拆解 —— 从数组操作到环检测的高效解题范式
java·c语言·数据结构·c++·算法·leetcode·职场和发展
西瓜树枝1 小时前
遗传算法与属性约简:原理、代码与参数配置
算法
haofafa1 小时前
STL之动态数组
开发语言·c++
jerryinwuhan1 小时前
理论及算法_时间抽取论文
前端·算法·easyui
小蒋学算法1 小时前
贪心算法:IPO
算法
得物技术1 小时前
大模型如何革新搜索相关性?智能升级让搜索更“懂你”|得物技术
算法·搜索引擎·排序算法
mit6.8242 小时前
hash滑窗|dp
算法