本文主要是介绍leetcode93.复原IP地址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在前文leetcode131分割回文串的基础上改进,因为前面遍历的是字符串及其子串问题,93题刚好基于这个问题之上进行改进,因此我也就是修修补补就完事儿了
toIP函数的作用是把“255”,“255” ,“255” ,“255”组成的vector<string>变换成"255.255.255.255"的string,然再结果集中push_back进去。
deleteZero函数作用是删除前导0,比如"255",“01”,“003”,“5”,变成"255",“1”,“3”,“5”
class Solution {
public:vector<string> ele;vector<string> ans;int len=0;vector<string> restoreIpAddresses(string s) {dfs(s,0);return ans;}void dfs(string& s,int idx){if(ele.size()==4&&len==s.size()){string* newS=toIP(&ele);ans.push_back(*newS);return;}for(int i=idx;i<s.size();++i){if(i-idx+1>=4){continue;}string ip=s.substr(idx,i-idx+1);int num=std::stoi(ip);if(num==0&&ip.size()==1){ele.push_back(ip);len+=ip.size();}else if(num>0&&num<=255){deleteZero(ip);ele.push_back(ip);len+=ip.size();}else {continue;}dfs(s,i+1);ele.pop_back();len-=ip.size();}}void deleteZero(string& s){auto iter=s.begin();while(*s.begin()=='0'){iter=s.erase(s.begin());}}string* toIP(vector<string>* pV){string* vs=new string();for(auto& item:*pV){vs->append(item);vs->append(".");}vs->pop_back();return vs;}
};
这篇关于leetcode93.复原IP地址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!