返回介绍

solution / 0800-0899 / 0816.Ambiguous Coordinates / README_EN

发布于 2024-06-17 01:03:34 字数 6159 浏览 0 评论 0 收藏 0

816. Ambiguous Coordinates

中文文档

Description

We had some 2-dimensional coordinates, like "(1, 3)" or "(2, 0.5)". Then, we removed all commas, decimal points, and spaces and ended up with the string s.

  • For example, "(1, 3)" becomes s = "(13)" and "(2, 0.5)" becomes s = "(205)".

Return _a list of strings representing all possibilities for what our original coordinates could have been_.

Our original representation never had extraneous zeroes, so we never started with numbers like "00", "0.0", "0.00", "1.0", "001", "00.01", or any other number that can be represented with fewer digits. Also, a decimal point within a number never occurs without at least one digit occurring before it, so we never started with numbers like ".1".

The final answer list can be returned in any order. All coordinates in the final answer have exactly one space between them (occurring after the comma.)

 

Example 1:

Input: s = "(123)"
Output: ["(1, 2.3)","(1, 23)","(1.2, 3)","(12, 3)"]

Example 2:

Input: s = "(0123)"
Output: ["(0, 1.23)","(0, 12.3)","(0, 123)","(0.1, 2.3)","(0.1, 23)","(0.12, 3)"]
Explanation: 0.0, 00, 0001 or 00.01 are not allowed.

Example 3:

Input: s = "(00011)"
Output: ["(0, 0.011)","(0.001, 1)"]

 

Constraints:

  • 4 <= s.length <= 12
  • s[0] == '(' and s[s.length - 1] == ')'.
  • The rest of s are digits.

Solutions

Solution 1

class Solution:
  def ambiguousCoordinates(self, s: str) -> List[str]:
    def f(i, j):
      res = []
      for k in range(1, j - i + 1):
        l, r = s[i : i + k], s[i + k : j]
        ok = (l == '0' or not l.startswith('0')) and not r.endswith('0')
        if ok:
          res.append(l + ('.' if k < j - i else '') + r)
      return res

    n = len(s)
    return [
      f'({x}, {y})' for i in range(2, n - 1) for x in f(1, i) for y in f(i, n - 1)
    ]
class Solution {
  public List<String> ambiguousCoordinates(String s) {
    int n = s.length();
    List<String> ans = new ArrayList<>();
    for (int i = 2; i < n - 1; ++i) {
      for (String x : f(s, 1, i)) {
        for (String y : f(s, i, n - 1)) {
          ans.add(String.format("(%s, %s)", x, y));
        }
      }
    }
    return ans;
  }

  private List<String> f(String s, int i, int j) {
    List<String> res = new ArrayList<>();
    for (int k = 1; k <= j - i; ++k) {
      String l = s.substring(i, i + k);
      String r = s.substring(i + k, j);
      boolean ok = ("0".equals(l) || !l.startsWith("0")) && !r.endsWith("0");
      if (ok) {
        res.add(l + (k < j - i ? "." : "") + r);
      }
    }
    return res;
  }
}
class Solution {
public:
  vector<string> ambiguousCoordinates(string s) {
    int n = s.size();
    vector<string> ans;
    auto f = [&](int i, int j) {
      vector<string> res;
      for (int k = 1; k <= j - i; ++k) {
        string l = s.substr(i, k);
        string r = s.substr(i + k, j - i - k);
        bool ok = (l == "0" || l[0] != '0') && r.back() != '0';
        if (ok) {
          res.push_back(l + (k < j - i ? "." : "") + r);
        }
      }
      return res;
    };
    for (int i = 2; i < n - 1; ++i) {
      for (auto& x : f(1, i)) {
        for (auto& y : f(i, n - 1)) {
          ans.emplace_back("(" + x + ", " + y + ")");
        }
      }
    }
    return ans;
  }
};
func ambiguousCoordinates(s string) []string {
  f := func(i, j int) []string {
    res := []string{}
    for k := 1; k <= j-i; k++ {
      l, r := s[i:i+k], s[i+k:j]
      ok := (l == "0" || l[0] != '0') && (r == "" || r[len(r)-1] != '0')
      if ok {
        t := ""
        if k < j-i {
          t = "."
        }
        res = append(res, l+t+r)
      }
    }
    return res
  }

  n := len(s)
  ans := []string{}
  for i := 2; i < n-1; i++ {
    for _, x := range f(1, i) {
      for _, y := range f(i, n-1) {
        ans = append(ans, "("+x+", "+y+")")
      }
    }
  }
  return ans
}
function ambiguousCoordinates(s: string): string[] {
  s = s.slice(1, s.length - 1);
  const n = s.length;
  const dfs = (s: string) => {
    const res: string[] = [];
    for (let i = 1; i < s.length; i++) {
      const t = `${s.slice(0, i)}.${s.slice(i)}`;
      if (`${Number(t)}` === t) {
        res.push(t);
      }
    }
    if (`${Number(s)}` === s) {
      res.push(s);
    }
    return res;
  };
  const ans: string[] = [];
  for (let i = 1; i < n; i++) {
    for (const left of dfs(s.slice(0, i))) {
      for (const right of dfs(s.slice(i))) {
        ans.push(`(${left}, ${right})`);
      }
    }
  }
  return ans;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文