题目
题解
首先在字符串s中枚举可以添加逗号和空格的位置,将s分为两个部分,前一部分x,后一部分y,然后对两个部分分别枚举小数点的位置(也可以不添加),
添加或者不添加小数点合法情况需要满足的条件:
- 不添加小数点 或者 添加小数点后的整数部分需要满足 数字为0 或者 不含前导0的整数(即0.x或者1.x这样的,不能是00.x)
- 添加小数点后,需要满足小数点后不为0(不能是x.0)
class Solution {
public List<String> ambiguousCoordinates(String s) {
int n=s.length();
s=s.substring(1,n-1);//去掉括号
List<String>res=new ArrayList<>();
//去掉括号后s长度为n-2
for(int i=1;i<n-2;i++){
List<String>lt=getPos(s.substring(0,i));
if(lt.isEmpty()) continue;
List<String>rt=getPos(s.substring(i));
if(rt.isEmpty()) continue;
//组合成坐标
for(String x:lt){
for(String y:rt){
res.add("("+x+", "+y+")");
}
}
}
return res;
}
//列举小数点所有可能位置
public List<String> getPos(String s){
List<String>pos=new ArrayList<>();
//添加不带小数点的数字
if(s.charAt(0)!='0'||"0".equals(s))
pos.add(s);
for(int i=1;i<s.length();i++){
//过滤前导0和末尾0
if((i!=1&&s.charAt(0)=='0')||s.charAt(s.length()-1)=='0')
continue;
//添加带小数点的数字
pos.add(s.substring(0,i)+"."+s.substring(i));
}
return pos;
}
}
时间复杂度: O ( n 3 ) O(n^3) O(n3)
空间复杂度: O ( n 3 ) O(n^3) O(n3)