topic1.两数之和
def twoSum( self,nums, target):
for i in range(0,len(nums)+1):
for j in range(i+1,len(nums)):
if nums[i]+nums[j]==target:
a=[i,j]
return a
说明:暴力解法,时间复杂度O(n2)
代码流程图:
topic 7整数反转
def reverse(self, x):
if x>=0:
p = int(str(x)[::-1])
if p >=2**31-1 or p<=-2**31:
return 0
else:
return p
elif x>=2**31-1 or x<=-2**31:
return 0
else:
q = - int(str(x)[1:][::-1])
if q >=2**31-1 or q<=-2**31:
return 0
else:
return q
思路:弄清题目限制,用判断语句
topic3.无重复字符的最长子串
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
st = {}
i, ans = 0, 0
for j in range(len(s)):
if s[j] in st:
i = max(st[s[j]], i)
ans = max(ans, j - i + 1)
st[s[j]] = j + 1
return ans;
思路:将列表中所有元素加入集合,用以判断是否重复,记录子串长度,向后遍历逐渐找出最大值
topic4回文数
def isPalindrome(self, x):
a = str(x);
b = a[::-1];
return a == b;
思路:将列表与其逆置列表比较,相同则true,不同则false
topic5罗马数字转整数
def romanToInt(self, s):
a = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
ans=0
for i in range(len(s)):
if i<len(s)-1 and a[s[i]]<a[s[i+1]]:
ans-=a[s[i]]
else:
ans+=a[s[i]]
return ans
思路:理清其中的数学关系,当出现不同单位组合时,如果前一个单位比后一个单位小则相减,其与则相加,遍历一遍,求和。
topic6最长公共前缀
def longestCommonPrefix(self, strs: List[str]) -> str:
lenth = len(strs[0])
strslen = len(strs)
min = 100
longstr = ''
for i in range(0,strslen):
if len(strs[i]) < min:
min = len(strs[i])
for i in range(0,min):
for j in range(0,strslen):
if strs[j][i] != strs[0][i]:
return longstr
longstr = longstr + strs[0][i]
return longstr
思路:先确定最小列表长度即为理想中最大公共前缀,然后双层循环找出最长公共前缀。