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;
    }
};
相关推荐
syagain_zsx4 小时前
WebSocket 教程:websocketpp 写 echo 服务端
linux·网络·c++·websocket·网络协议·工具库
大陈子编程5 小时前
C++ CSP-J 与 CSP-S 题单:洛谷 140 题知识点全覆盖
c++
?abc!5 小时前
(动态规划+DFS)494. 目标和
算法·深度优先·动态规划
信奥卷王5 小时前
[GESP202406 六级] 二叉树(含视频)
数据结构·算法
惊鸿一博5 小时前
Plücker直线_ 用两个三维向量描述一条空间直线
线性代数·算法·直线·几何表示
张小姐的猫5 小时前
【MySQL】数据类型
android·linux·数据库·c++·mysql·adb·php
讳疾忌医丶5 小时前
编译器眼中的 C++ 循环:从指针别名、IEEE 754 结合律到 SIMD 语义证明
开发语言·c++
小道士写程序5 小时前
Rust 中的字符串与切片(String 与 &str)
算法
圣保罗的大教堂5 小时前
leetcode 3863. 将一个字符串排序的最小操作次数 中等
leetcode
Tisfy6 小时前
LeetCode 3863.将一个字符串排序的最小操作次数:分类讨论(一次遍历)——简单易懂版
算法·leetcode·字符串·题解·分类讨论