<style>
html, body, .ui-content {
background: #222222;
color: #00BFFF;
}
/* 設定 code 模板 */
.markdown-body code,
.markdown-body tt {
background-color: #ffffff36;
}
.markdown-body .highlight pre,
.markdown-body pre {
color: #ddd;
background-color: #00000036;
}
.hljs-tag {
color: #ddd;
}
.token.operator {
background-color: transparent;
}
/* 設定連結 */
a,
.open-files-container li.selected a {
color: #89FFF8;
}
a:hover,
.open-files-container li.selected a:hover {
color: #89FFF890;
}
</style>
###### tags: `Leetcode`
# 93. Restore IP Addresses
###### Link : https://leetcode.com/problems/restore-ip-addresses/description/
## 題目
回傳所有可能的IP地址
## 程式碼
```cpp=
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> ans;
Backtracking(s, 0, 0, ans);
return ans;
}
private:
void Backtracking(string &s, int start, int end, vector<string> &ans){
//切割出的數字已經大於三個 不需繼續算下去
if(count(s.begin(), s.end(), '.') > 3)
return;
if(s.size() <= end){//走訪string完畢
//確認數字剛好有三個 才放入答案中
if(count(s.begin(), s.end(), '.') == 3 && s.back()!='.')
ans.push_back(s);
return;
}
//目前數字是兩位數以上且開頭是0,不需繼續算下去
if(s[start] == '0' && start < end)
return;
//目前數字大於255,不需繼續算下去
if(stoi(s.substr(start, end - start + 1)) > 255)
return;
else{//Backtracking
//目前數字後面加上.
s.insert(end + 1, ".");
Backtracking(s, end + 2, end + 2, ans);
//目前數字後面不加上.
s.erase(end + 1, 1);
Backtracking(s, start, end + 1, ans);
}
}
};
```
## Date
### 2023/1/21