作者:U友47919166 | 来源:互联网 | 2023-09-11 18:05
131.分割回文串
又是不会做的一题呢。
代码看起来不难,但想出代码还是很难得。
class Solution {
public List> partition(String s) {
List> ans&#61;new ArrayList<>();
List list&#61;new ArrayList<>();
back(ans,list,s,0);
return ans;
}
boolean huiwen(String s ,int index,int i){
for(int j&#61;index,k&#61;i;j
if(s.charAt(j)!&#61;s.charAt(k))
return false;
}
return true;
}
void back(List> ans,List list,String s,int index){
if(index>&#61;s.length()){
ans.add(new ArrayList<>(list));
return ;
}
for(int i&#61;index;i
if(huiwen(s,index,i)&#61;&#61;true){
list.add(s.substring(index,i&#43;1));
}
else{
continue;
}
back(ans,list,s,i&#43;1);
list.remove(list.size()-1);
}
}
}
93.复原IP地址
不会&#xff0c;距离上次做题又过了3个星期&#xff0c;本来是想每日2题&#xff0c;结果搞笑的是&#xff0c;大概每隔2个星期碰一次力扣&#xff0c;最终做成了每日一题的样子&#xff0c;由于某些因素&#xff0c;最近又要考虑用C&#43;&#43;刷题。
class Solution {
private:
vector res;
bool isvalid(const string&s,int start,int end){
if(start>end)
return false;
if(s[start]&#61;&#61;&#39;0&#39;&&start!&#61;end)
return false;
这俩个if语句是为了解决部分特殊用例。很细节的。
int num&#61;0;
for(int i&#61;start;i<&#61;end;i&#43;&#43;){
if(s[i]>&#39;9&#39;||s[i]<&#39;0&#39;)
return false;
num&#61;num*10&#43;s[i]-&#39;0&#39;;
if(num>255)
return false;
}
return true;
}
void back(string&s,int start,int pointnum){
if(pointnum&#61;&#61;3){
if(isvalid(s,start,s.size()-1))
res.push_back(s);
return;
}
for(int i&#61;start;i
if(isvalid(s,start,i)){
pointnum&#43;&#43;;
s.insert(s.begin()&#43;i&#43;1,&#39;.&#39;);
back(s,i&#43;2,pointnum);
s.erase(s.begin()&#43;i&#43;1);
pointnum--;
}else break;
}
}
public:
vector restoreIpAddresses(string s) {
res.clear();
if(s.size()<4||s.size()>12) return res;
back(s,0,0);
return res;
}
};