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. input下拉框

    用Html5和css.js写的,引用的bootstrap和jquery文件请各位看客自己去下载

  2. 转:Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-j8m0mf5q/mysqlclient

    错误场景 第一次部署服务器时mysqlclient安装失败 思考 初步考虑是pip没有升级,最后发现不是这个原因. 解决办法 来源:https://blog.csdn.net/mr_tia/artic ...

  3. Java-Oracle数据库连接

    Oracle数据库先创建一个表和添加一些数据,下面是连接数据库的具体实现.(导入jar包:ojdbc14.jar) import java.sql.Connection; import java.sq ...

  4. hashmap源码研究

    概述 在官方文档中是这样描述HashMap的: Hash table based implementation of the Map interface. This implementation pr ...

  5. python-常见用法

    一.注释 单行注释:#后全部注释 多行注释:'''所有内容'''  或者使用 """所有内容"""  ,多行注释用三对单引号或双引号包裹 二 ...

  6. android 自定义title

    package com.xiangyu.su; import android.app.Activity; import android.os.Bundle; import android.view.V ...

  7. Linux 安装源码软件

    linux下,源码的安装一般由3个步骤组成:配置(configure).编译(make).安装(make install) 过程中用到configure --prefix  --with:其中--pr ...

  8. 服务管理之openssh

    1. 使用 SSH 访问远程命令行 1.1 OpenSSH 简介 OpenSSH这一术语指系统中使用的Secure Shell软件的软件实施.用于在远程系统上安全运行shell.如果您在可提供ssh服 ...

  9. IT人保护视力的10个有效方法

    保护视力锻炼十法   有关资料表明:近年来,我国中小学生的近视率呈逐年增长的趋势,1993年底已高达60左右.众所周知,近视除了与遗传有一定联系外,还与光线不足.近距离阅读过多等眼睛过度疲劳密切相关. ...

  10. Django高级实战 开发企业级问答网站完整

    资源获取链接点击这里 Django高级实战 开发企业级问答网站 从实际需求分析开始,实现当今主流知识问答应用的功能,包括动态.文章.问答.私信.消息通知.搜索.个人中心,打造企业级知识问答网站,由此全 ...