题目简介:
我们有一些二维坐标,如 "(1, 3)"
或 "(2, 0.5)"
,然后我们移除所有逗号,小数点和空格,得到一个字符串S
。返回所有可能的原始字符串到一个列表中。
原始的坐标表示法不会存在多余的零,所以不会出现类似于”00”, “0.0”, “0.00”, “1.0”, “001”, “00.01”或一些其他更小的数来表示坐标。此外,一个小数点前至少存在一个数,所以也不会出现”.1”形式的数字。
最后返回的列表可以是任意顺序的。而且注意返回的两个数字中间(逗号之后)都有一个空格。
示例 1:
1 2
| 输入: "(123)" 输出: ["(1, 23)", "(12, 3)", "(1.2, 3)", "(1, 2.3)"]
|
示例 2:
1 2 3 4
| 输入: "(00011)" 输出: ["(0.001, 1)", "(0, 0.011)"] 解释: 0.0, 00, 0001 或 00.01 是不被允许的。
|
示例 3:
1 2 3 4
| 输入: "(100)" 输出: [(10, 0)] 解释: 1.0 是不被允许的。
|
提示:
4 <= S.length <= 12
.
S[0]
= “(“, S[S.length - 1]
= “)”, 且字符串 S
中的其他元素都是数字。
思路:
首先将字符串去除两端的括号。
然后依次遍历可以切割成两个字符串的位置,以下几种情况不能进行下一步操作:
- 字符串的大小大于1,且只有0
- 字符串的首个字符和最后一个字符都为0,如
0.10
然后每个字符串进行所有可能情况的遍历,即遍历小数点添加的位置。
若小数点的后半部分的最后一个字符为0,则舍去,如1.0
。
最后将切割完的两个字符串的所有情况依次添加到结果数组中即可。
代码如下:
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| class Solution { public:
vector<string> res;
vector<string> solve2(string& s){
if(s.size() == 1) return {s};
vector<string> temp; string now_s;
int i = 0; if(s[i] == '0'){
now_s = "0."; i++;
while(i < s.size()){
now_s += s[i]; i++; }
return {now_s}; } temp.push_back(s); for(int i = 0; i < s.size() - 1; i++){
string first = s.substr(0, i + 1); string second = s.substr(i + 1, s.size() - i);
if(second[second.size() - 1] != '0') temp.push_back(first + "." + second); }
return temp; }
bool judge(string& s){
if(s.size() == 1) return true; int i = 0; while(i < s.size() && s[i] == '0') i++; return !(i == s.size() || (s[s.size() - 1] == '0' && s[0] == '0')); }
void solve(int pos, string& s){
string s1 = s.substr(0, pos + 1); string s2 = s.substr(pos + 1, s.size() - pos);
if(!judge(s1) || !judge(s2)) return;
vector<string> v_1 = solve2(s1); vector<string> v_2 = solve2(s2);
for(int i = 0; i < v_1.size(); i++){
for(int j = 0; j < v_2.size(); j++){
res.push_back("(" + v_1[i] + ", " + v_2[j] + ")"); } } }
vector<string> ambiguousCoordinates(string s) {
s = s.substr(1, s.size() - 2);
for(int i = 0; i < s.size() - 1; i++){ solve(i, s); }
return res; } };
|