Day 40
Date: November 7, 2022 4:44 PM
Title: 模糊坐标
Link:https://leetcode.cn/problems/ambiguous-coordinates/description/
枚举,切片
class Solution:
def ambiguousCoordinates(self, s: str) -> List[str]:
def get_p(st: str) -> List[str]:
pos = [] # 初始化
if st[0] != '0' or st == '0':#找合法整数 第一个字符为0或者 就是0时 划分的整个st符合条件
pos.append(st)
for p in range(1, len(st)): # (0 - p-1, p - 最后一个)找合法小数
if p != 1 and st[0] == '0' or st[-1] == '0':# 如果有前导0并且p不为1(即切片小数点前存在0x的形式)或最后一位数为0的情况下,就肯定不符合小数切片直接退出循环
break
pos.append(st[:p] + '.' + st[p:])# 划分为小数
return pos #
n = len(s) - 2 # 除去左右括号
result = [] #存储所有坐标
s = s[1: len(s) - 1]
for x in range(1, n):# x(0 - x-1)坐标,y(x, 最后一个数)坐标的切片位置
lt = get_p(s[:x])
if len(lt) == 0: # x坐标在此位置切片没有合法的数
continue
rt = get_p(s[x:]) # y坐标在此位置切片没有合法的数
if len(rt) == 0:
continue
for i, j in product(lt, rt):# 当前位置切片合法的x, y 的所有排列组合
result.append('(' + i + ', ' + j + ')')
return result
**product()**用于求多个可迭代对象的笛卡尔积
(Cartesian Product),它跟嵌套的 for 循环等价.
即:product(A, B) 和
((x,y) for x in A for y in B)一样.
也就是for x in A:
**for y in B:**