816. Ambiguous Coordinates
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 stringS
. 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 inS
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:
816. Ambiguous Coordinates的更多相关文章
- 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 ...
- 【LeetCode】816. Ambiguous Coordinates 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.me/ 题目地址:https://leetcode.com/problems/ambiguous ...
- 【leetcode】816. Ambiguous Coordinates
题目如下: 解题思路:我的方案是先把S拆分成整数对,例如S='1230',先拆分成(1,230),(12,30),(123,0),然后再对前面整数对进行加小数点处理.比如(12,30)中的12可以加上 ...
- [Swift]LeetCode816. 模糊坐标 | Ambiguous Coordinates
We had some 2-dimensional coordinates, like "(1, 3)" or "(2, 0.5)". Then, we re ...
- [LeetCode] Ambiguous Coordinates 模糊的坐标
We had some 2-dimensional coordinates, like "(1, 3)" or "(2, 0.5)". Then, we re ...
- All LeetCode Questions List 题目汇总
All LeetCode Questions List(Part of Answers, still updating) 题目汇总及部分答案(持续更新中) Leetcode problems clas ...
- Swift LeetCode 目录 | Catalog
请点击页面左上角 -> Fork me on Github 或直接访问本项目Github地址:LeetCode Solution by Swift 说明:题目中含有$符号则为付费题目. 如 ...
- 【LeetCode】字符串 string(共112题)
[3]Longest Substring Without Repeating Characters (2019年1月22日,复习) [5]Longest Palindromic Substring ( ...
- Qt5.3编译错误——call of overloaded ‘max(int int)’is ambiguous
错误描述: 今天在使用Qt写一个C++函数模板的测试程序的时候,编译的时候,编译的时候出现如下错误: 错误描述为:在main函数中,进行函数max()重载时,出现(ambiguous)含糊的,不明确的 ...
随机推荐
- 登录界面,body上有背景图,点击输入框时,弹出的手机键盘会把背景图顶变形,而且会把footer顶上去
js: //防止背景图被手机键盘压缩变形 $(document).ready(function () { $('body').css({'height':$(window).height()}) }) ...
- why?
优点 充分利用多核CPU的计算能力: 方便进行业务拆分,提升应用性能 缺点 上下文切换 注意线程安全,避免死锁
- Java创建对象的初始化顺序
1. 初始化块 初始化块通常写在类的构造方法之前,由花括号括起来,通常包含对成员属性进行初始化的语句: 初始化块分为instance初始化块和static初始化块,初始化块在构造方法执行之前被执行: ...
- 关于servelt的相关介绍
1.@WebServlet注解的作用 在Servlet 3.0中,使用@WebServlet注解可实现servlet和url的映射,它告知容器哪些Servlet会提供服务以及额外信息,其作用相当于之前 ...
- C# 两个datatable中的数据快速比较返回交集或差集[z]
最基本的写法无非是写多层foreach循环,数据量多了,循环的次数是乘积增长的. 这里推荐使用Except()差集.Intersect()交集,具体性能没有进行对比. 如果两个datatable的字段 ...
- AX_CreateAndPostPurch
static void CreateAndPostPurch(Args _args) { List il = new List(Types::Record); DocumentNum Document ...
- Python中的迭代器、生成器
from collections import Iterable, Iterator 1. 可迭代(iterable)对象 参考官网链接 class I: def __init__(self, v): ...
- AHOI——Day1个人感悟
今天,是个bilibili的日子.(嗯?什么意思?) 洛谷已经尽力了: 于是我带着洛谷的祝福,来到了AHOI的考场--合肥一中. 其实我是考完才签到的,我一大早五点多就起来了,到考场后,在肯德基吃了早 ...
- Maven之pom.xml配置文件详解
此文非原创,摘自:https://www.baidu.com/link?url=GlGgW21nijIiULDZj0RfPH8ofqGMqEnAzXiym7O3hfrZM5nFH2enukemBNTX ...
- 2019.03.29 NOIP训练 友好国度(点分治+容斥)
传送门 思路: 直接上点分治+容斥计算每个因数对应的贡献即可. 代码: #include<bits/stdc++.h> #define ri register int using name ...