(65) 93. Recuperar dirección IP (código de acceso)

题目链接:
https://leetcode-cn.com/problems/restore-ip-addresses/
难度:中等
93. 复原IP地址
	给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
	有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间组成),整数之间用 '.' 分隔。
示例:
	输入: "25525511135"
	输出: ["255.255.11.135", "255.255.111.35"]

El tema no es difícil, pero esto no me impide hacerlo. Tengo que admitir que mi comprensión de la recursividad es demasiado superficial (después de todo, es un plato).
Determine el número actual de la cadena de parámetros recursivos.

class Solution {
    
    
public:
    static constexpr int SEG_COUNT = 4;
    vector<string> ans;
    vector<int> segments;
    void dfs(const string&s,int segid,int segstart){
    
    
    	// 满足条件
    	//   segid=4 表示已经有四个数了
    	//   segstart=s.size() 表示正好到达s结尾
    	// segments取出(“.” 勿忘)   存入ans
        if(segid==SEG_COUNT){
    
    
            if(segstart==s.size()){
    
    
                string ip="";
                for(int i=0;i<SEG_COUNT;i++){
    
    
                    ip+=to_string(segments.at(i));
                    if(i!=SEG_COUNT-1){
    
    
                        ip += ".";
                    }
                }
                ans.push_back(move(ip));
            }
            return;
        }
        // 还没有到四个数就已经到末尾了
        if(segstart==s.size()){
    
    
            return;
        }
        // 若当前为0 则下一个
        if(s.at(segstart)=='0'){
    
    
            segments.at(segid)=0;
            dfs(s,segid+1,segstart+1);
        }
        // addr当前数值
        int addr = 0;
        for(int i=segstart;i<s.size();++i){
    
    
            addr=addr*10+(s.at(i)-'0');
            if(addr>0&&addr<=0xFF){
    
    
                segments[segid] = addr;
                dfs(s,segid+1,i+1);
            }else{
    
    
            	// 若不在<=255 再加上一位更大 
            	// 直接跳出循环 此种情况的可能选择已经结束
                break;
            }
        }
    }

    vector<string> restoreIpAddresses(string s) {
    
    
    	// 将过程中的数存入segments
        segments.resize(SEG_COUNT);
        dfs(s,0,0);
        return ans;
    }
};

Supongo que te gusta

Origin blog.csdn.net/li_qw_er/article/details/107888814
Recomendado
Clasificación