首页 > 其他分享 >[leetcode每日一题]11.7

[leetcode每日一题]11.7

时间:2022-11-07 10:41:24浏览次数:91  
标签:tmp 示例 每日 11.7 小数点 part1 part2 leetcode append

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​​ 中的其他元素都是数字。

Solution

今天大概算一道模拟枚举题吧。首先想到的就是将数组分成两个部分,作为添加逗号的位置。之后需要考虑添加小数点的位置,当然首先,如果合法的话,可以不添加小数点,只要没有前导0.判断是否有前导0,只需要看分成的这两部分是否第一位是0即可。当然这里又需要考虑一种特殊情况就是整个这一部分就是0,这也是合法的。

对于插小数点的位置,其实也很简单,只需要考虑分成的这个部分的第一位和最后一位,都不能是0(当然有特殊情况,即0.1这种,单独拿出来讨论即可)。

然后考虑变量的范围有点绕,写的时候需要稍微注意一下。官方题解写得好一些,首先拿掉两边的括号,其次使用函数把两个部分的枚举做了封装。这里贴我自己的Python代码:

代码(Python)

class Solution:
def ambiguousCoordinates(self, s: str) -> List[str]:
res = []
for i in range(2, len(s)-1):
part1 = []
part2 = []
if s[1]!='0' or i==2: part1.append(s[:i])
if s[i]!='0' or i==len(s)-2: part2.append(s[i:])
# 插小数点
for j in range(1, i-1):
if s[i-1]=='0': break
if j==1:
tmp = s[:2]
tmp += '.'
tmp += s[2:i]
part1.append(tmp)
else:
if s[1]=='0': break
tmp = s[:j+1]
tmp += '.'
tmp += s[j+1:i]
part1.append(tmp)
for k in range(i, len(s)-2):
if s[-2]=='0': break
if k==i:
tmp = s[k]
tmp += '.'
tmp += s[k+1:]
part2.append(tmp)
else:
if s[i]=='0': break
tmp = s[i:k+1]
tmp += '.'
tmp += s[k+1:]
part2.append(tmp)
if part1 and part2:
res += [i+', '+j for i in part1 for j in part2]
return res

标签:tmp,示例,每日,11.7,小数点,part1,part2,leetcode,append
From: https://blog.51cto.com/u_15763108/5828059

相关文章

  • [LeetCode] 1678. Goal Parser Interpretation
    Youowna GoalParser thatcaninterpretastring command.The command consistsofanalphabetof "G", "()" and/or "(al)" insomeorder.TheGoalPar......
  • leetcode 54. 螺旋矩阵 js高效实现
    给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。示例1:  输入:matrix=[[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]......
  • LeetCode刷题记录.Day7
    有效的字母异位词题目链接242.有效的字母异位词-力扣(LeetCode)classSolution{public:boolisAnagram(strings,stringt){intrecord[26]={0};......
  • leetcode318
    6231.雇佣K位工人的总代价题意:一个数组表示雇佣工人花费,k表示需要雇佣的人数,从数组前后各选candidates个人,从中选花费最小下标最小的工人,然后数组更新,重复上述操作,直至......
  • #yyds干货盘点# LeetCode 腾讯精选练习 50 题:二叉树中的最大路径和
    题目:路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中至多出现一次。该路径至少包含一个节点,且不一定经过根节......
  • dp-leetcode152
    动态规划问题,存在重叠子问题/***<p>给你一个整数数组<code>nums</code> ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘......
  • leetcode(33)图系列题目
    1615.最大网络秩直接模拟即可classSolution:defmaximalNetworkRank(self,n:int,roads:List[List[int]])->int:adjs=defaultdict(set)#注意......
  • [哈希]leetcode242. 有效的字母异位词
    题目给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若 s和t 中每个字符出现的次数都相同,则称 s和t 互为字母异位词。示例 1:输入:......
  • [哈希]leetcode349. 两个数组的交集
    题目给定两个数组 nums1 和 nums2,返回它们的交集 。输出结果中的每个元素一定是唯一的。我们可以不考虑输出结果的顺序。示例1:输入:nums1=[1,2,2,1],nums2......
  • Leetcode第1106题:解析布尔表达式(Parsing a boolean expression)
    解题思路看到表达式求解,自然想到栈。从左至右遍历布尔表达式expression,对于不同类型字符,进行不同操作:逗号,,跳过该字符;不是逗号,和右括号),入栈;如果是右括号),则一个表......