zoukankan      html  css  js  c++  java
  • 【leetcode】Restore IP Addresses

    Restore IP Addresses

    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)

     
     
    利用回溯法,注意几种情况:
    0.0.0.0是合法的
    01.1.1.1是不合法的
    “10000”只能拆成10.0.0.0
     
     
     1 class Solution {
     2 public:
     3     vector<string> restoreIpAddresses(string s) {
     4        
     5         vector<string> result;
     6         string tmp="";
     7         bt(s,result);
     8         return result;
     9        
    10     }
    11    
    12     void bt(string s,vector<string> &result,int start=0,string tmp="",int left=5)
    13     {
    14         left--;
    15         int n=s.length();
    16        
    17         //找到的条件
    18         if(left==0&&start==n)
    19         {
    20             //去除最后一个点
    21             tmp.pop_back();
    22             result.push_back(tmp);
    23             return;
    24         }
    25        
    26         //停止条件
    27         if(left==0||(n-start)/left>3||(n-start)/left==0||start>n)
    28         {
    29             return;
    30         }
    31  
    32        
    33         string tmpStr;
    34         if(n-start>=1)
    35         {
    36             tmpStr=tmp;
    37             string str1=s.substr(start,1);
    38             tmp+=str1;
    39             bt(s,result,start+1,tmp+".",left);
    40             tmp=tmpStr;
    41         }
    42        
    43         if(n-start>=2&&s[start]!='0')
    44         {
    45             tmpStr=tmp;
    46             string str2=s.substr(start,2);
    47             tmp+=str2;
    48             bt(s,result,start+2,tmp+".",left);
    49             tmp=tmpStr;
    50         }
    51        
    52         if(n-start>=3&&s[start]!='0')
    53         {
    54             tmpStr=tmp;
    55             string str3=s.substr(start,3);
    56             int n = atoi(str3.c_str());
    57            
    58             if(n<=255)
    59             {
    60                 tmp+=str3;
    61                 bt(s,result,start+3,tmp+".",left);
    62                 tmp=tmpStr;
    63             }
    64         }
    65        
    66     }
    67 };
     
     
  • 相关阅读:
    MonoBehaviour.FixedUpdate 固定更新
    Gizmos 辅助线框
    Quaternion 四元数
    Object.Instantiate 实例
    c语言描述的静态查找表
    c语言描述的二叉树的基本操作(层序遍历,递归,非递归遍历)
    c语言描述的链队列的基本操作
    c语言描述的双向链表的基本操作
    c语言描述的简单选择排序
    c语言描述的二分插入排序法
  • 原文地址:https://www.cnblogs.com/reachteam/p/4199266.html
Copyright © 2011-2022 走看看