方法一:
class Solution {
public List<String> ambiguousCoordinates(String s) {
int n = s.length();
List<String> res = new ArrayList<>();
// 逗号所处的位置
for(int i = 2; i < n - 1; i++) {
List<String> part1s = findCombin(s.substring(1, i));
if(part1s.isEmpty()) continue;
List<String> part2s = findCombin(s.substring(i, n - 1));
if(part2s.isEmpty()) continue;
for(String part1 : part1s) {
for(String part2 : part2s) {
String tmp = "(" + part1 + ", " + part2 + ")";
res.add(tmp);
}
}
}
return res;
}
public List<String> findCombin(String s) {
int len = s.length();
List<String> list = new ArrayList<>();
// 如果当前字符串仅有一位,则返回其本身
if(len == 1) {
list.add(s);
return list;
}
// 如果整个字符串首位和末位都为0,则不满足题意
if(s.charAt(0) == '0' && s.charAt(len - 1) == '0') return list;
// 如果首位为0,则小数点只能在首位后方
if(s.charAt(0) - '0' == 0) {
String tmp = "0" + "." + s.substring(1, len);
list.add(tmp);
return list;
}
// 如果末位为0,则小数必不可能满足题意
if(s.charAt(len - 1) - '0' == 0) {
String tmp = s.substring(0, len);
list.add(tmp);
return list;
}
for(int i = 1; i < len; i++) {
String tmp = s.substring(0, i) + "." + s.substring(i, len);
list.add(tmp);
}
// 没有小数点的情况
list.add(s);
return list;
}
}