第七章 回溯演算法part03
93.復原IP地址 78.子集 90.子集II
93.復原IP地址
題目地址 :
Code ( 複用 了 131.分割回文串 的 程式碼 , 同時 對 Component 的 處理 方向 、 遍歷 ,/ 選取 方式、 新增 條件 進行 了 調整 , 對 Cache 字串 的 拼接 ,/ 修剪 維護 進行 了 調整 尤其 是 新增 '.' 分隔 符 後 , Component 的 左 邊界 下標 可以 快速 提供 字串 在 修剪 時 需要 的 一部分 長度 資訊 與 前段 形成 '.' 的 數量 形成 長度 資訊 ) :
class Solution {
public:
struct Struct_Edge_Left_String_Edge_Right
{
int edge_Left ;
string str_SubStr ;
int edge_Right ;
};
vector<string> restoreIpAddresses(string s) {
int length_s = s.length() ;
// 子串 在 這裡 可以 重複
// It ' s different
// seed 位 / 發芽 的 位置
// 迴文 串 資訊 的 建立
vector<vector<Struct_Edge_Left_String_Edge_Right>> vec_Info_SubStr(length_s , vector<Struct_Edge_Left_String_Edge_Right>(0)) ;
// IP 段 的 新增
for(int i = ( length_s - 1 ) ; i >= 0 ; i-- )
{
int edge_Right = i ;
int edge_Left ;
string str_Temp_Cache = "";
//cout<< " i = " << i << endl ;
for(int j = 0 ; j < 3 ; j ++ )
{
edge_Left = i - j ;
//cout<< " j = " << j << endl ;
if( ( i - j ) < 0 )
{
break ;
}
if(s[i - j ] < 0x30 || s[i - j ] >= 0x40 )
{
break ;
}
if(j == 1 && s[i - j ] == '0')
{
str_Temp_Cache = s[ (i - j) ] + str_Temp_Cache ;
continue ;
}
if(j == 2 )
{
if(s[i - j ] == '0')
{
break ;
}
if(s[