- 首先我要在纸上,非常非常聪明且迅速且机灵,
- 给出几个用例,找出边界用例和特殊用例,确定特判条件;在编码前考虑到所有的条件
- 向面试官提问:问题规模,特殊用例
- 给出函数头
- 暴力解,简述,优化。
- 给出能够想到的最优价
- 伪代码,同时结合用例
- 真实代码
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)
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
const char* str = s.c_str();
vector<string> ret;
int size = s.size();
for(int i = 1; i < size; ++i)
{
if(!isValid(str, i))
continue;
for(int j = i+1; j < size; ++j)
{
if(!isValid(str+i, j-i))
continue;
for(int k = j+1; k < size; ++k)
{
if(!isValid(str+j, k-j))
continue;
if(isValid(str+k, size-k))
{
ret.push_back(s.substr(0, i) + "." + s.substr(i, j-i) +
"." + s.substr(j, k-j) + "." + s.substr(k, size-k));
}
}
}
}
return ret;
}
bool isValid(const char* s, int len)
{
if('0' == s[0])
if(1 == len)
return true;
else
return false;
int temp = 0;
for(int i = 0; i < len; ++i)
{
temp = temp*10 + (int)(s[i] - '0');
if(temp > 255)
return false;
}
if(temp <= 255 && temp >= 1)
return true;
else
return false;
}
};