写了几道简单力扣题
给你一个整数 n
,找出从 1
到 n
各个整数的 Fizz Buzz 表示,并用字符串数组 answer
(下标从 1 开始)返回结果,其中:
answer[i] == "FizzBuzz"
如果i
同时是3
和5
的倍数。answer[i] == "Fizz"
如果i
是3
的倍数。answer[i] == "Buzz"
如果i
是5
的倍数。answer[i] == i
(以字符串形式)如果上述条件全不满足。
原代码:
l = []
for i in range(1, n + 1):
l.append(i)
for j in range(n):
if l[j] % 15 == 0:
l[j] = 'FizzBuzz'
elif l[j] % 3 == 0:
l[j] = 'Fizz'
elif l[j] % 5 == 0:
l[j] = 'Buzz'
return l
运行结果:
[1,2,"Fizz"]
题目要求数字为字符串类型,最初想通过循环再把数字转为字符串格式,不过试了几种方法都没成功。所以先把所有数字添加进列表再转换类型不知道怎么改,最后想到一个一个元素按要求添加进列表
修改后代码:
l = []
for i in range(1, n + 1):
if i % 15 == 0:
l.append("FizzBuzz")
elif i % 3 == 0:
l.append("Fizz")
elif i % 5 == 0:
l.append("Buzz")
else:
l.append(str(i))
return l
下一题:
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
最初的代码:
j = 0
k = 0
l = 0
for i in s:
if i == '[':
j += 1
elif i == ']':
j -= 1
if j < 0:
return False
if i == '(':
k += 1
elif i == ')':
k -= 1
if k < 0:
return False
if i == '{':
l += 1
elif i == '}':
l -= 1
if l < 0:
return False
if k == 0 and j == 0 and l == 0:
return True
else:
return False
起初以为"([)]"这种的也符合题目要求,事实证明不行,必须一左一右的括号相对应
所以想到把“(){} []”给替换成空再判定是不是空字符串
代码:
if len(s) % 2 != 0:
return False
while '()' in s or '[]' in s or '{}' in s:
s = s.replace('()', '').replace('[]', '').replace('{}', '')
if s == '':
return True
else:
return False
下一题:
给你一个非空数组,返回此数组中 第三大的数 。如果不存在,则返回数组中最大的数。
原代码:
if len(nums) <= 2:
nums = sorted(set(nums))
return nums[1]
else:
nums = sorted(set(nums))
return nums[-3]
对于“[1,1,2]”的输出就会出现索引出错,考虑不周,先用set删除重复元素在判断
修改后代码:
if len(set(nums)) == 2:
nums = sorted(set(nums))
return nums[1]
elif len(set(nums)) == 1:
return nums[0]
else:
nums = sorted(set(nums))
return nums[-3]
对着出错的测试用例一项一项改,写题思维比较乱。
看了别人写的题解后才想到最大的一项可以直接用max函数求,可以更简洁一点
最终代码:
if len(set(nums)) <= 2:
return max(nums)
else:
nums = sorted(set(nums))
return nums[-3]
对于算法的认识过于浅薄,简单题总是暴力破解,上了难度的题就不会
每天学一点吧