题目描述:
请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C++ 中的 atoi 函数)。
函数 myAtoi(string s) 的算法如下:
读入字符串并丢弃无用的前导空格
检查第一个字符(假设还未到字符末尾)为正还是负号,读取该字符(如果有)。 确定最终结果是负数还是正数。 如果两者都不存在,则假定结果为正。
读入下一个字符,直到到达下一个非数字字符或到达输入的结尾。字符串的其余部分将被忽略。
将前面步骤读入的这些数字转换为整数(即,“123” -> 123, “0032” -> 32)。如果没有读入数字,则整数为 0 。必要时更改符号(从步骤 2 开始)。
如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被固定为 −231 ,大于 231 − 1 的整数应该被固定为 231 − 1 。
返回整数作为最终结果。
class Solution:
def myAtoi(self, s: str) -> int:
'''
使用正则表达式
^:匹配字符串开头,
[\+\-]:代表一个+字符或-字符,
?:前面一个字符可有可无,
\d:一个数字,
+:前面一个字符的一个或多个,
\D:一个非数字字符
max(min(数字, 2**31 - 1), -2**31) 用来防止结果越界
'''
return max(min(int(*re.findall('^[\+\-]?\d+', s.lstrip())), 2**31 - 1), -2**31)
题目描述:
数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。
class Solution:
def generateParenthesis(self, n: int) -> List[str]:
if n==0:
return [""]
elif n==1:
return ["()"]
elif n==2:
return ["()()","(())"]
result=[]
for i in range(n):
j=n-1-i
temp1=self.generateParenthesis(i)
temp2=self.generateParenthesis(j)
result.extend(["(%s)%s"%(p,q)for p in temp1 for q in temp2])
return result
题目描述:
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
class Solution:
def permuteUnique(self, nums: List[int]) -> List[List[int]]:
return list(set(itertools.permutations(nums)))
题目描述:
某个字符串 S 需要执行一些替换操作,用新的字母组替换原有的字母组(不一定大小相同)。
每个替换操作具有 3 个参数:起始索引 i,源字 x 和目标字 y。规则是:如果 x 从原始字符串 S 中的位置 i 开始,那么就用 y 替换出现的 x。如果没有,则什么都不做。
举个例子,如果 S = “abcd” 并且替换操作 i = 2,x = “cd”,y = “ffff”,那么因为 “cd” 从原始字符串 S 中的位置 2 开始,所以用 “ffff” 替换它。
再来看 S = “abcd” 上的另一个例子,如果一个替换操作 i = 0,x = “ab”,y = “eee”,以及另一个替换操作 i = 2,x = “ec”,y = “ffff”,那么第二个操作将不会执行,因为原始字符串中 S[2] = ‘c’,与 x[0] = ‘e’ 不匹配。
所有这些操作同时发生。保证在替换时不会有任何重叠: S = “abc”, indexes = [0, 1], sources = [“ab”,“bc”] 不是有效的测试用例。
class Solution:
def findReplaceString(self, S: str, indexes: List[int], sources: List[str], targets: List[str]) -> str:
arr=[]
prev=len(S)
for i,s,t in sorted(zip(indexes,sources,targets),reverse=True):
arr.append(S[i:i+len(s)].replace(s,t)+S[i+len(s):prev])
prev=i
return S[:prev]+''.join(arr[::-1])
题目描述:
你有一个单词列表 words 和一个模式 pattern,你想知道 words 中的哪些单词与模式匹配。
如果存在字母的排列 p ,使得将模式中的每个字母 x 替换为 p(x) 之后,我们就得到了所需的单词,那么单词与模式是匹配的。
(回想一下,字母的排列是从字母到字母的双射:每个字母映射到另一个字母,没有两个字母映射到同一个字母。)
返回 words 中与给定模式匹配的单词列表。
你可以按任何顺序返回答案。
class Solution:
def findAndReplacePattern(self, words: List[str], pattern: str) -> List[str]:
res = []
for word in words:
if len(set(list(word))) == len(set(list(pattern))) == len(set(zip(list(word),list(pattern)))):
res.append(word)
return res