[LeetCode] 문자열에서 IP 주소를 복원하는 string의 IP 복원

1951 단어 LeetCode
Given a string containing only digits, restore it by returning all possible valid IP address combinations. For example: Given  "25525511135" , return  ["255.255.11.135", "255.255.111.35"] . (Order does not matter) 사고방식: 돌아가는 방법으로.IP 주소는 점분 10진법으로 모두 4개의part가 있는데 각각part는 0보다 크고 255보다 작다.귀속할 때 partnumber를 전달하고 partnumber가 4일 때 IP 주소 복구가 완료됨을 설명합니다.또한 각 파트의 범위는 [0, 255] 안에 있어야 하며, 0으로 시작하는 파트가 나타나지 않도록 주의해야 한다. 예를 들어
010은 재미없어요.
010
.1”.
코드는 다음과 같습니다.
       vector<string> restoreIpAddresses(string s) {  
       // main function
            vector<string> col;   
            string ip;   
            partitionIP(s, 0, 0, ip, col);   
            return col;   
       }  
       
       void partitionIP(string s, int startIndex, int partNum,    
       string resultIp, vector<string>& col)   
       {// utility function
            //max 3 bits per partition   
            if(s.size() - startIndex > (4-partNum)*3) return;   
            //min 1 bit per partition   
            if(s.size() - startIndex < (4-partNum)) return;  
            if(startIndex == s.size() && partNum ==4)   
            {   
                resultIp.resize(resultIp.size()-1);   
                 col.push_back(resultIp);   
                 return;   
            }   
            int num =0;   
            for(int i = startIndex; i< startIndex +3; i++)   
            {   
                 num = num*10 + (s[i]-'0');   
                 if(num<=255)   
                 {   
                      resultIp+=s[i];   
                      partitionIP(s, i+1, partNum+1, resultIp+'.', col);       
                 }    
                 if(num ==0)//0.0.0.0 valid, but need to avoid 0.1.010.01   
                 {   
                      break;   
                 }   
            }   
       }   

좋은 웹페이지 즐겨찾기