W********e 发帖数: 45 | 1 【leetcode restore IP address】这题,思路和算法我都写出来了,不过有个地方觉
得很奇怪,小问题 ,可是我没想明白,请指教!
问题就是为什么要用tmp来代替ans这个参数?在下面的code里我有coment
class Solution {
public:
vector restoreIpAddresses(string s) {
vector result;
string ans;
dfs(s,&result,ans,4);
return result;
}
void dfs(string s,vector*result, string ans,int tokenLeft)
{
int i,sectionValue=0;
if(s.length()==0 && tokenLeft==0)
{
result->push_back(ans);
return;
}
if(tokenLeft==0||s.length()==0)
{
return;
}
if(s.at(0)=='0')
{
if(tokenLeft!=4)
{
ans.append(".");
}
ans.append("0");
dfs(s.substr(1),result,ans,tokenLeft-1);
}
else
{
for(i=0;i<3&&i
{
sectionValue = sectionValue *10+s.at(i)-'0';
if(sectionValue<=255)
{
//string tmp = ans;
if(tokenLeft!=4)
{
ans.append(".");
}
//tmp.append(s.substr(0,i+1));
ans.append(s.substr(0,i+1));//这里我直接用ans,并且直接
传进入下面的dfs,总是会出错。但是用tmp代替ans确没问题????????
dfs(s.substr(i+1),result,ans,tokenLeft-1);//tmp
}
}
}
}
};
细节不行。。求指教!! | d*******3 发帖数: 58 | 2 假设当前字符串是123,ans="xxx.xxx",你当前ip段选择了1,
ans ="xxx.xxx.1",然后dfs到下一段(假设下一段成功了,即xxx.xxx.1.23)。然后退
回来,你再次尝试选12,这个时候ans+"12"="xxx.xxx.1.12",然后再加上下一步成了"
xxx.xxx.1.12.3",这显然是不对的。。。 | W********e 发帖数: 45 | 3
可是用tmp,tmp=ans,不是一样有这个问题么??
【在 d*******3 的大作中提到】 : 假设当前字符串是123,ans="xxx.xxx",你当前ip段选择了1, : ans ="xxx.xxx.1",然后dfs到下一段(假设下一段成功了,即xxx.xxx.1.23)。然后退 : 回来,你再次尝试选12,这个时候ans+"12"="xxx.xxx.1.12",然后再加上下一步成了" : xxx.xxx.1.12.3",这显然是不对的。。。
| W********e 发帖数: 45 | 4
想通了,谢谢啦!
【在 W********e 的大作中提到】 : : 可是用tmp,tmp=ans,不是一样有这个问题么??
| d*******3 发帖数: 58 | |
|