题目:
leetcode.cn/problems/am…
算法:
方法一:模拟
做不出来时,多读几遍题目。本题是求s能拆分成的二维坐标的所有组合。
func ambiguousCoordinates(s string) []string {
s = s[1:len(s) - 1]
n := len(s)
ans := make([]string, 0)
for i := 0; i < n - 1; i ++ {
// left, right都必须有,才能构成一个二维坐标
left := search(s, 0, i)
right := search(s, i + 1, n - 1)
for _, l := range left {
for _, r := range right {
ans = append(ans, "(" + l + ", " + r +")")
}
}
}
return ans
}
// 从[start, end]有多少中合法的加小数点,组成一个数的方法
func search(s string, start, end int) []string {
ans := make([]string, 0)
// start == end或者0个小数点
if start == end || s[start] != '0' {
ans = append(ans, s[start:end + 1])
}
// 小数点加在哪个位置呢
for i := start; i < end; i ++ {
left := s[start:i + 1]
right := s[i + 1:end + 1]
// 小数整数部分长度大于1时,首位不能为0,末尾不能为0
if len(left) > 1 && left[0] == '0' || right[len(right) - 1] == '0' {
continue
}
ans = append(ans, left + "." + right)
}
return ans
}