816. 模糊坐标

72 阅读1分钟

题目:
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
}