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;
    }
};
相关推荐
hy.z_777几秒前
【C++】9. Vector
开发语言·c++
jjjava2.01 分钟前
牛客算法题(第四期)
算法
雪碧聊技术3 分钟前
力扣 回溯法 | LCR 020. 回文子串
javascript·算法·leetcode
wabs6668 分钟前
关于哈希表【力扣454.四数相加II的思考】
数据结构·算法·leetcode·散列表
我能坚持多久21 分钟前
优选算法——专题一双指针(上):附四道例题详解
c++·学习·算法
Forever Nore23 分钟前
LeetCode 2 两数相加 - 链表
leetcode·链表·哈希表
白狐_79825 分钟前
408数据结构第7章:查找①——顺序查找、折半查找、分块查找知识总结
数据结构
Tim_1027 分钟前
【C++】023、移动语义&深拷贝
开发语言·c++·算法
月光船幽幽37 分钟前
锁死后干预有效性的关键突破
人工智能·python·算法
2501_9065651240 分钟前
哥德巴赫猜想
算法