【ATT】Restore IP Addresses

如何避免多个0的情况。。。。

    vector<string> restoreIpAddresses(string s) {
        // Note: The Solution object is instantiated only once and is reused by each test case.
        vector<string> res;
        string tmp;
        dfs(0,4,s,tmp,res);
        return res;
    }
    
    void dfs(int curpos,int cnt,string& s, string tmp,vector<string>& res)
    {
        if(s.size()-curpos<cnt||s.size()-curpos>3*cnt)
            return;
        if(curpos==s.size())
        {
            tmp.resize(tmp.size()-1);
            res.push_back(tmp);
            return;
        }
        
        int num = 0;
        for(int i=curpos;i<curpos+3;i++)
        {
            num = num*10+s[i]-'0';
            if(num<=255)
            {
                tmp += s[i];
                dfs(i+1,cnt-1,s,tmp+".",res);
            }
            if(num==0)  //num==0退出,因为在if(num<=255)这个条件中已经计算过了
                break;
        }
    }

  

posted @ 2013-10-25 21:09  summer_zhou  阅读(109)  评论(0编辑  收藏  举报