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;
    }
};
相关推荐
洛水水几秒前
【力扣100题】57.合并区间
算法·leetcode
圣保罗的大教堂1 分钟前
leetcode 33. 搜索旋转排序数组 中等
leetcode
玉树临风ives1 分钟前
atcoder ABC 458 题解
数据结构·c++·算法
chengO_o5 分钟前
STL关联式容器:map 与 set 的使用
c++·stl·set·map·平衡二叉搜索树
AKA__Zas7 分钟前
芝士算法 (双指针篇2.0)
java·数据结构·leetcode·学习方法
如竟没有火炬11 分钟前
有序矩阵中第K小的元素
数据结构·线性代数·算法·leetcode·矩阵·深度优先
叁散12 分钟前
ESP32智能闹钟系统实验报告
单片机·嵌入式硬件·算法
Realdagongzai28 分钟前
Linux 6.19.10 内核调度器算法详解
linux·学习·算法·spring·kernel
charlie11451419129 分钟前
现代C++特性指南(5)——RAII 深入理解:资源管理的基石
开发语言·c++·现代c++
洛水水1 小时前
【力扣100题】63.最小覆盖子串
算法·leetcode