题解 | #数字字符串转化成IP地址#

数字字符串转化成IP地址

https://www.nowcoder.com/practice/ce73540d47374dbe85b3125f57727e1e

#include <string>
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串vector
     */
    vector<string> restoreIpAddresses(string s) {
        // write code here
        vector<string> ans;
        
        int len = s.size();
        if(len>12)
            return ans;
        // i是第一个数字段结尾下标
        for(int i=0; i+3<len && i<3; ++i)
        {
            int s_1 = stoi(s.substr(0,i+1));
            // 如果该字符段长度大于1,但是首字符为'0',说明有可能是前缀为0的情况,如 "01","010";
            if((i+1>1 && s[0]=='0') || (s_1>255))
                break;

            // j是第二个数字段结尾下标
            for(int j=i+1; j+2<len && j<6; ++j)
            {
                int s_2 = stoi(s.substr(i+1,j-i));
                if((j-i>1 && s[i+1]=='0') || (s_2>255))
                    break;

                // n是第三个数字段结尾下标
                for(int n=j+1; n+1<len && n<9; ++n)
                {
                    int s_3 = stoi(s.substr(j+1,n-j));
                    if((n-j>1 && s[j+1]=='0') || (s_3>255))
                        break;
 
                    // 第四个数字段结尾下标是len-1
                    int s_4 = stoi(s.substr(n+1,len-1-n));
                    if((len-1-n>1 && s[n+1]=='0') || (s_4>255))
                        continue;

                    string str = to_string(s_1) + "." + to_string(s_2) + "."
                                + to_string(s_3) + "." + to_string(s_4);
                    ans.emplace_back(str);
                }
            }
        }

        return ans;
    }
};

虚数五行区解题中心 文章被收录于专栏

非淡泊无以明志,非宁静无以致远

全部评论

相关推荐

丿南烟丶:黑白模板吧,不要这样花哨的。 主要成就太空了,和获奖融在一起,写一两行就行了。 职业技能不要这样排,就传统的掌握精通什么什么然后举例补充的一些重要技术点。 自我介绍说实话也没啥用,可以删了。 把自己的两个项目方案细节补充上去,为什么这样设计,怎么设计,成果是什么按star法则来写 你要引导面试官来问你的技能和项目,你的获奖和自我介绍别人可能看都不看一眼或者不太在乎,重要的是展示你能干活的能力
点赞 评论 收藏
分享
迷茫的大四🐶:价格这么低都能满了?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务