93 復原IP位址

2021-10-05 18:18:40 字數 4030 閱讀 8507

// 已經切割好了,拼接字串

std::string tmp;

for(int i = 0; i< 3; ++i)

tmp += path[3];

res.push_back(std::move(tmp));

return;

}if(begin >= s.size())

int sum = 0;

if(s[begin] == '0')

for(int i = begin; i < s.size(); ++i)

// 儲存.和.之間的一段

path.push_back(s.substr(begin, i-begin+1));

// 向下面一層遍歷

dfs(s, i+1, path, res);

// 回溯

path.pop_back();}}

};

class solution 

// 儲存臨時路徑,兩個"."之間的一段

vectorpath;

int begin = 0;

dfs(s, 0, path, result);

return std::move(result);

}void dfs(const std::string& s, int begin,

vector& path, vector& result)

temp += path[3];

result.push_back(std::move(temp));

return;

}if(path.size() == 4 && begin < path.size())

// 從begin開始,獲取每乙個長度文len的

for(int len = 1; len <= 3; ++len)

// 排除"0xx"情況

if(len != 1 && s[begin] == '0')

// 如果某一段》255直接返回

std::string temp_sum = s.substr(begin, len);

if(stoi(temp_sum) > 255)

path.push_back(std::move(temp_sum));

// 向下一次層

dfs(s, begin+len, path, result);

// 回溯

path.pop_back();}}

};

class solution 

int placeholder_count = 0; // 表示'.'的個數

std::string path; // 儲存臨時的字串

int begin = 0; // 遍歷到下一層的字串s的位置

// 回溯演算法

dfs(s, begin, result, placeholder_count, path);

return result;

}// dfs函式表示,計算兩個佔位符'.'和'.'之間的字串

bool dfs(std::string s, int begin, vector& result,

int placeholder_count, std::string& path)

// "1.1.11."表示遍歷到字串的末尾了,這種情況需要返回false,

if(begin == s.size())

int sum = 0; // 儲存累計和

bool is_over_255 = false; // 是否超過255

for (int i = begin; i < s.size(); ++i)

}// 沒有超過累計和

if(!is_over_255)

return true;

}int sum = 0; // 當前層,兩個佔位符'.'之間的累計和

int count = 0; // 當前層push_back的字元數量

int zero_count = 0; // 當前層0的數量

int zero_begin = 0; // 當前層開始字元是否為0

for(int i = begin; i < s.size(); ++i)

} else

}// "1.1.00",這樣的ip不合法,需要清空當前層的字串,停止迴圈

if(zero_count > 1 && zero_begin == 1)

// 當前層和小於255

if(sum <= 255) else

if(sum <= 255) }}

// 回溯到上一層

if(path.size() > 0 )

path.pop_back();}}

return true;}};

解釋的詳細點:

class solution 

int placeholder_count = 0; // 表示'.'的個數

std::string path; // 儲存臨時的字串

int begin = 0; // 遍歷到下一層的字串s的位置

// 回溯演算法

dfs(s, begin, result, placeholder_count, path);

return result;

}// dfs函式表示,計算兩個佔位符'.'和'.'之間的字串

bool dfs(std::string s, int begin, vector& result,

int placeholder_count, std::string& path)

// "1.1.11."表示遍歷到字串的末尾了,這種情況需要返回false,

if(begin == s.size())

int sum = 0; // 儲存累計和

bool is_over_255 = false; // 是否超過255

for (int i = begin; i < s.size(); ++i)

}// 沒有超過累計和

if(!is_over_255)

return true;

}int sum = 0; // 當前層,兩個佔位符'.'之間的累計和

int count = 0; // 當前層push_back的字元數量

int zero_count = 0; // 當前層0的數量

int zero_begin = 0; // 當前層開始字元是否為0

for(int i = begin; i < s.size(); ++i)

} else

break;}}

// "1.1.00",這樣的ip不合法,需要清空當前層的字串,停止迴圈

if(zero_count > 1 && zero_begin == 1)

break;

}// 當前層和小於255

if(sum <= 255) else

break;

}if(sum <= 255)

--count;

path.pop_back();}}

}}// 回溯到上一層

if(path.size() > 0 )

path.pop_back();}}

return true;}};

93 復原IP位址

給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。有效的 ip 位址正好由四個整數 每個整數字於 0 到 255 之間組成 整數之間用 分隔。示例 輸入 25525511135 輸出 255.255.11.135 255.255.111.35 class solution int k...

93 復原 IP 位址

93.復原 ip 位址 有效 ip 位址正好由四個整數 每個整數字於0到255之間組成,且不能含有前導0 整數之間用 分隔。給定乙個只包含數字的字串s,用以表示乙個 ip 位址,返回所有可能的有效 ip 位址,這些位址可以通過在s中插入 來形成。你不能重新排序或刪除s中的任何數字。你可以按任何順序返...

93 復原IP位址 python

題目 給定乙個只包含數字的字串,復原它並返回所有可能的 ip 位址格式。例如,輸入 25525511135 輸出 255.255.11.135 255.255.111.35 def restore ip address s if len s 4 or len s 12 return res path...