# 2021/4/9
目录
加一
【题目】
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例 1:
输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。
示例 2:输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。
示例 3:输入:digits = [0]
输出:[1]提示:
1 <= digits.length <= 100
0 <= digits[i] <= 9
【我的代码】
进位还是有一些坑的,需要注意。。。
class Solution:
def plusOne(self, digits: List[int]) -> List[int]:
if digits == [9]:
return [1, 0]
elif digits[-1] >= 0 and digits[-1] < 9:
digits[-1] += 1
return digits
else:
digits[-1] = 0
digits[-2] += 1
i = -2
while (digits[i] == 10 and abs(i) < len(digits)):
digits[i] = 0
digits[i - 1] += 1
i -= 1
if abs(i) >= len(digits) and digits[i] == 10: # 坑,注意
digits[i] = 0
digits = [1] + digits
return digits
执行结果:
执行用时:36 ms, 在所有 Python3 提交中击败了82.14%的用户
内存消耗:14.9 MB, 在所有 Python3 提交中击败了8.64%的用户
有效的括号
【题目】
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。示例 1:
输入:s = "()"
输出:true
示例 2:输入:s = "()[]{}"
输出:true
示例 3:输入:s = "(]"
输出:false
示例 4:输入:s = "([)]"
输出:false
示例 5:输入:s = "{[]}"
输出:true提示:
1 <= s.length <= 104
s 仅由括号 '()[]{}' 组成
【我的代码】
1、根据括号的闭合顺序特点采用栈来存储未匹配的字符
2、采用字典进行匹配索引
class Solution:
def isValid(self, s: str) -> bool:
a = list(s)
stack = []
reverse = {')': '(', '}': '{', ']': '['}
for i in a:
if i == '(' or i == '[' or i == '{':
stack.append(i)
else:
if len(stack) <= 0:
return False
j = stack.pop()
if j != reverse[i]:
return False
if len(stack) != 0:
return False
return True
提交结果:
执行用时:44 ms, 在所有 Python3 提交中击败了44.48%的用户
内存消耗:15 MB, 在所有 Python3 提交中击败了9.87%的用户
代码优化之去掉字典,用if判断代替:
class Solution:
def isValid(self, s: str) -> bool:
a = list(s)
stack = []
# reverse = {')': '(', '}': '{', ']': '['}
for i in a:
if i == '(' or i == '[' or i == '{':
stack.append(i)
else:
if len(stack) <= 0:
return False
j = stack.pop()
if (j == '[' and i != ']') or (j == '{' and i != '}') or (j == '(' and i != ')'):
return False
if len(stack) != 0:
return False
return True
执行结果:
执行用时:36 ms, 在所有 Python3 提交中击败了86.33%的用户
内存消耗:15 MB, 在所有 Python3 提交中击败了10.77%的用户
【其他方法】
@wings 的评论:
class Solution:
def isValid(self, s: str) -> bool:
while '{}' in s or '()' in s or '[]' in s:
s = s.replace('{}', '')
s = s.replace('[]', '')
s = s.replace('()', '')
return s == ''
(内心:看到的第一反应:消消乐呀
执行结果:
执行用时:48 ms, 在所有 Python3 提交中击败了25.44%的用户
内存消耗:14.8 MB, 在所有 Python3 提交中击败了87.15%的用户