友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
|
|
有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

公众号的微信号是: jikerizhi。因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。 |
816. 模糊坐标
我们有一些二维坐标,如 (1, 3) 或 (2, 0.5),然后我们移除所有逗号,小数点和空格,得到一个字符串`S`。返回所有可能的原始字符串到一个列表中。
原始的坐标表示法不会存在多余的零,所以不会出现类似于"00", "0.0", "0.00", "1.0", "001", "00.01"或一些其他更小的数来表示坐标。此外,一个小数点前至少存在一个数,所以也不会出现“.1”形式的数字。
最后返回的列表可以是任意顺序的。而且注意返回的两个数字中间(逗号之后)都有一个空格。
示例 1: 输入: "(123)" 输出: ["(1, 23)", "(12, 3)", "(1.2, 3)", "(1, 2.3)"]
示例 2: 输入: "(00011)" 输出: ["(0.001, 1)", "(0, 0.011)"] 解释: 0.0, 00, 0001 或 00.01 是不被允许的。
示例 3: 输入: "(0123)" 输出: ["(0, 123)", "(0, 12.3)", "(0, 1.23)", "(0.1, 23)", "(0.1, 2.3)", "(0.12, 3)"]
示例 4: 输入: "(100)" 输出: [(10, 0)] 解释: 1.0 是不被允许的。
提示:
-
4 <= S.length <= 12. -
S[0] = (,S[S.length - 1] = ), 且字符串S中的其他元素都是数字。
思路分析
将字符串进行分割,然后给每个分割的字符串添加小数点,要排除非法数字的情况。
-
一刷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/**
* @author D瓜哥 · https://www.diguage.com
* @since 2026-07-11 21:53:24
*/
public List<String> ambiguousCoordinates(String s) {
s = s.substring(1, s.length() - 1);
List<String> result = new ArrayList<>();
for (int i = 1; i < s.length(); i++) {
List<String> heads = toDecimal(s.substring(0, i));
if (heads.isEmpty()) {
continue;
}
List<String> tails = toDecimal(s.substring(i));
if (tails.isEmpty()) {
continue;
}
for (String h : heads) {
for (String t : tails) {
result.add('(' + h + ", " + t + ')');
}
}
}
return result;
}
private List<String> toDecimal(String s) {
List<String> result = new ArrayList<>();
for (int i = 0; i < s.length(); i++) {
String d = (i > 0 ? s.substring(0, i) + '.' : "") + s.substring(i);
if ((d.charAt(0) == '0' && d.length() > 1 && d.charAt(1) != '.')
|| (d.contains(".") && d.charAt(d.length() - 1) == '0')) {
continue;
}
result.add(d);
}
return result;
}

