LC.93.复原IP地址(简单DFS)

LC.93.复原IP地址(简单DFS)

思路:简单 d f s dfs ,注意特殊情况,前导 0 0 即可。

class Solution {
public:
    vector<string>ans;
    string s;
    int n;
    void dfs(string c,int p,int cnt){
        //cout<<"c="<<c<<" p="<<p<<" cnt="<<cnt<<endl;
         if(cnt==4){
             ans.push_back(c);
             return;
         }
         if(p==n) return;
         string tmp;
         if(cnt==3){
		 tmp=s.substr(p);
		 if(tmp.size()>3||tmp.size()>1&&tmp[0]=='0') return;
             int x=stoi(tmp);
             if(x>=0&&x<=255) {
                 if(!cnt)
                 dfs(c+tmp,n,cnt+1);
                 else dfs(c+"."+tmp,n,cnt+1);
             }
		 }
         else for(int i=1;i<=3&&p+i-1<n;i++){
              tmp=s.substr(p,i);
             if(tmp.size()>3) continue;
             else if(tmp.size()>1&&tmp[0]=='0') continue;
             int x=stoi(tmp);
             if(x>=0&&x<=255) {
                 if(!cnt)
                 dfs(c+tmp,p+i,cnt+1);
                 else dfs(c+"."+tmp,p+i,cnt+1);
             }
         }
    }
    vector<string> restoreIpAddresses(string t) {
        s=t;
        n=s.size();
        dfs("",0,0);
        return ans;
    }
}sol;

猜你喜欢

转载自blog.csdn.net/weixin_45750972/article/details/107891716