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.  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 less digits.  Also, a decimal point within a number never occurs without at least one digit occuring before it, so we never started with numbers like ".1".

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

Example 1:
Input: "(123)"
Output: ["(1, 23)", "(12, 3)", "(1.2, 3)", "(1, 2.3)"]
Example 2:
Input: "(00011)"
Output:  ["(0.001, 1)", "(0, 0.011)"]
Explanation:
0.0, 00, 0001 or 00.01 are not allowed.
Example 3:
Input: "(0123)"
Output: ["(0, 123)", "(0, 12.3)", "(0, 1.23)", "(0.1, 23)", "(0.1, 2.3)", "(0.12, 3)"]
Example 4:
Input: "(100)"
Output: [(10, 0)]
Explanation:
1.0 is not allowed.

Note:

  • 4 <= S.length <= 12.
  • S[0] = "(", S[S.length - 1] = ")", and the other elements in S are digits.

Approach #1: Brute Force. [Java] [Memory Limit Exceeded]

class Solution {
public List<String> ambiguousCoordinates(String S) {
List<String> ans = new ArrayList<>();
StringBuilder sb = new StringBuilder(S);
for (int i = 1; i < S.length(); ++i) {
StringBuilder perfix = new StringBuilder(sb.substring(0, i));
StringBuilder suffix = new StringBuilder(sb.substring(i));
if (valid(perfix) && valid(suffix)) {
List<String> l1 = split(perfix);
List<String> l2 = split(suffix); for (int j = 0; j < l1.size(); ++j) {
for (int k = 0; k < l2.size(); ++k) {
String temp = "(" + l1.get(j) + ", " + l2.get(k) + ")";
ans.add(temp);
}
}
}
}
return ans;
} public List<String> split(StringBuilder sb) {
List<String> ret = new ArrayList<>();
if (sb.length() == 1) {
ret.add(sb.toString());
return ret;
} else if (sb.charAt(0) == '0' && sb.charAt(1) == '0') {
sb.insert(1, '.');
ret.add(sb.toString());
return ret;
} else if (sb.charAt(sb.length() - 1) == '0' && sb.charAt(sb.length() - 2) == '0') {
sb.insert(sb.length() - 1, '.');
ret.add(sb.toString());
return ret;
} else {
for (int i = 1; i < sb.length() - 1; ++i) {
StringBuilder temp = sb;
sb.insert(i, '.');
ret.add(sb.toString());
}
}
return ret;
} public boolean valid(StringBuilder sb) {
if (sb.length() == 1) return true;
if (sb.length() > 4 && sb.charAt(0) == '0' && sb.charAt(1) == 0 &&
sb.charAt(sb.length() - 2) == '0' && sb.charAt(sb.length() - 1) == '0')
return false;
for (int i = 0; i < sb.length(); ++i)
if (sb.charAt(i) != '0') return true;
return false;
}
}

  

Approach #2: String. [Java]

class Solution {
public List<String> ambiguousCoordinates(String S) {
List<String> ans = new ArrayList<>();
int n = S.length();
for (int i = 1; i < n - 1; ++i) {
List<String> A = f(S.substring(1, i)), B = f(S.substring(i, n-1));
for (String a : A) for (String b : B) ans.add("(" + a + ", " + b + ")");
}
return ans;
} public List<String> f(String s) {
int n = s.length();
List<String> ret = new ArrayList<>();
if (n == 0 || n > 1 && s.charAt(0) == '0' && s.charAt(n-1) == '0') return ret;
if (n > 1 && s.charAt(0) == '0') {
ret.add("0." + s.substring(1));
return ret;
}
ret.add(s);
if (n == 1 || s.charAt(n-1) == '0') return ret;
for (int i = 1; i < n; ++i) {
ret.add(s.substring(0, i) + "." + s.substring(i, n));
}
return ret;
}
}

Analysis:

if S == "" : return []

if S == "0" : return [S]

if S == "0XXXX0" : return []

if S == "0XXXX" : return ["0.XXXX"]

if S == "XXXX0" : return [S]

return [S, "X.XXX", "XX.XX", "XXX.X" ...]

  

Reference:

https://leetcode.com/problems/ambiguous-coordinates/discuss/123851/C%2B%2BJavaPython-Solution-with-Explanation

816. Ambiguous Coordinates的更多相关文章

  1. 816 Ambiguous Coordinates (many cases problem)

    https://www.cnblogs.com/Java3y/p/8846955.html -- link of the problem 816 IDEA: check the dot and int ...

  2. 【LeetCode】816. Ambiguous Coordinates 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.me/ 题目地址:https://leetcode.com/problems/ambiguous ...

  3. 【leetcode】816. Ambiguous Coordinates

    题目如下: 解题思路:我的方案是先把S拆分成整数对,例如S='1230',先拆分成(1,230),(12,30),(123,0),然后再对前面整数对进行加小数点处理.比如(12,30)中的12可以加上 ...

  4. [Swift]LeetCode816. 模糊坐标 | Ambiguous Coordinates

    We had some 2-dimensional coordinates, like "(1, 3)" or "(2, 0.5)".  Then, we re ...

  5. [LeetCode] Ambiguous Coordinates 模糊的坐标

    We had some 2-dimensional coordinates, like "(1, 3)" or "(2, 0.5)".  Then, we re ...

  6. All LeetCode Questions List 题目汇总

    All LeetCode Questions List(Part of Answers, still updating) 题目汇总及部分答案(持续更新中) Leetcode problems clas ...

  7. Swift LeetCode 目录 | Catalog

    请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift    说明:题目中含有$符号则为付费题目. 如 ...

  8. 【LeetCode】字符串 string(共112题)

    [3]Longest Substring Without Repeating Characters (2019年1月22日,复习) [5]Longest Palindromic Substring ( ...

  9. Qt5.3编译错误——call of overloaded ‘max(int int)’is ambiguous

    错误描述: 今天在使用Qt写一个C++函数模板的测试程序的时候,编译的时候,编译的时候出现如下错误: 错误描述为:在main函数中,进行函数max()重载时,出现(ambiguous)含糊的,不明确的 ...

随机推荐

  1. HashTable和HashMap的区别详解(转)

    一.HashMap简介 HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. HashMap是非线程安全的, ...

  2. PL/SQL链接Oracle出现乱码

    1.用Pl/sql时,中文注释是乱码,需要查看下oracle server端的字符集. SQL语句:select userenv('language') from dual 结果:SIMPLIFIED ...

  3. python zlib ,zlib 压缩流

    zlib 字符串:使用zlib.compress可以压缩字符串.使用zlib.decompress可以解压字符串. 数据流:压缩:compressobj,解压:decompressobj       ...

  4. JVM总括二-垃圾回收:GC Roots、回收算法、回收器

    JVM总括二-垃圾回收:GC Roots.回收算法.回收器 目录:JVM总括:目录 一.判断对象是否存活 为了判断对象是否存活引入GC Roots,如果一个对象与GC Roots没有直接或间接的引用关 ...

  5. UI交互设计关键词:情感化设计与心理

    情感化设计,一定有一个关键词.情感,是指人对周围事物和自身以及对自己行为的态度,它是人对客观事物的一种特殊的反映形式,是主体对外界刺激给予肯定或否定的心理反应,也是对客观事物是否符合自己需要的态度或体 ...

  6. Laravel 中使用 JWT 认证的 Restful API

    Laravel 中使用 JWT 认证的 Restful API 5天前/  678 /  3 / 更新于 3天前     在此文章中,我们将学习如何使用 JWT 身份验证在 Laravel 中构建 r ...

  7. Python之路(第三十三篇) 网络编程:socketserver深度解析

    一.socketserver 模块介绍 socketserver是标准库中的一个高级模块,用于网络客户端与服务器的实现.(version = "0.4") 在python2中写作S ...

  8. python爬虫-百度百科百名红通人员名单

    爬虫代码: import urllib.request import os, re from bs4 import BeautifulSoup import xlwt URL = "http ...

  9. ZOJ 2507 Let's play a game

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1507 MisereNim博弈.代码如下: //=========== ...

  10. remove集合的用法

    循环集合的方法有三种: 简单for循环 iterator循环 增强for循环 例子如下: List<Long> fList = new ArrayList<Long>(); f ...