Welcome to Subscribe On Youtube
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)"
becomess = "(13)"
and"(2, 0.5)"
becomess = "(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] == '('
ands[s.length - 1] == ')'
.- The rest of
s
are digits.
Solutions
-
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; } };
-
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) ]
-
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; }