引言
自觉自己算法或者说叫代码能力过弱,于是决定自此之后每天刷Leetcode上的题。这个不可能有什么人会看,只是自己学习的一个记录。希望自己能坚持下来。
PS: 更新:目前的确是坚持下来了,但在CSDN上还是写内容更有深度的博客合适,故接下来的刷题都直接记录在Leetcode上我的主页上了,在那里写题解也更合适些。目前我就把这几篇刷题的整合到一篇之上。之后就不在CSDN上更新Leetcode了。
PPS: Leetcode上的个人账号也叫千想。
1两数之和
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
j=-1
lens=len(nums)
for i in range(lens):
temp=nums[:i]
if (target-nums[i]) in temp:
j = temp.index(target-nums[i])
break
if j > -1:
return [j,i]
2两数相加
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:
dummy = p = ListNode(None) #创造两个空节点 分别可由dummy(虚的)和p指向
sum_ = 0 # 保留每一位加和得到的数字
while l1 or l2 or sum_: #三者只要都不为零 就可以循环下去 l1或者l2为空时 表示链表用完 sum_为0时 表示没有进位
sum_ += (l1.val if l1 else 0) + (l2.val if l2 else 0) #这里用到了if else的单行表示式
p.next = ListNode(sum_ % 10) #用p节点作为移动节点 逐一的延长列表 注意这里需要用ListNode来增加新节点
p = p.next # 移动节点换到下一个
if l1: l1=l1.next #非空就移动
if l2: l2=l2.next
sum_ = sum_ //10 # //是取整运算符 这里表示取sum_的十位上的数字
return dummy.next #用到之前设置好的头节点 它的下一位就是正式的链表数字
7整数反转
class Solution:
def reverse(self, x: int) -> int:
revert_x = 0 #保留翻转数字
symbol = 1 #保留正负号
if x < 0:
symbol = -1
x = -x #取正
while x != 0:
revert_x = revert_x * 10 + x % 10
x = x // 10
if revert_x > 2**31 - 1 :
return 0
else:
return symbol * revert_x
9回文数
class Solution:
def isPalindrome(self, x: int) -> bool:
if x < 0 or (x % 10 ==0 and x != 0): # 排除掉负数情况;排除掉10、3300这种末尾有零的情况
return False
if x // 10 == 0: # 如果是个位数,直接正确
return True
y = 0
while x > y:
y = y * 10 + x % 10 # 倒序保存数字
x = x // 10 # 原数字缩短
if x // 10 == y and y != 0: #将奇数位的回文情况考虑进去
return True
if x == y: # 偶数且回文
return True
else:
return False
13罗马数字转整数
class Solution:
def romanToInt(self, s: str) -> int:
d = {'I': 1, 'IV': 4, 'V': 5, 'IX': 9, 'X': 10, 'XL': 40, 'L': 50, 'XC': 90, 'C': 100, 'CD': 400, 'D': 500, 'CM': 900, 'M': 1000}
result = 0
i = 0
while i < len(s):
#查看当前位和下一位的字符
str1 = s[i:i+2]
#如果当前位置是特殊情况,那么返回其在字典中对应值,
#并且下一次从特殊字符之后一位开始索引
if str1 in d:
result += d.get(str1)
i += 2
#如果当前位不是特殊情况,那么只返回当前位的数值
else:
result += d[s[i]]
i += 1
return result
14最长公共前缀
class Solution:
def longestCommonPrefix(self, strs: List[str]) -> str:
strs.sort()
i = 0
mins = 9999
n = len(strs)
while i < n:
if len(strs[i]) < mins:
mins = len(strs[i])
i += 1
x = ''
for i in range(mins):
if strs[0][i] != strs[n - 1][i]:
return x
x += strs[0][i]
return x