12-16
12 整数转罗马
从3999一直if判断下来。大于一个标识就减去那个标识 然后再打印出对应符号。结果就是 一言难尽
无情的判断工具人。 就这 还打败了 90的人 内存还有60呢
class Solution(object): def intToRoman(self, num): """ :type num: int :rtype: str """ rel = '' if num >= 1000: #处理1000-3000 for i in range(num//1000): rel += 'M' num = num%1000 if num >= 100: #处理100-999 if num >= 900: #处理900-999 rel += 'CM' num = num%100 elif num >=500 : #处理500-899 rel += 'D' num = num-500 if num >= 400: #处理400-499 rel += 'CD' num = num%100 elif num >= 100: #处理100-399 for i in range(num//100): rel += 'C' num = num%100 if num >= 10: #处理10-99 if num >= 90: #处理90-99 rel += 'XC' num = num%10 elif num >=50 : #处理50-89 rel += 'L' num = num-50 if num >= 40: #处理40-49 rel += 'XL' num = num%10 elif num >= 10: #处理10-39 for i in range(num//10): rel += 'X' num = num%10 if num >= 0: #处理1-9 if num == 9: #处理9 rel += 'IX' num = num-9 elif num >=5 : #处理5 rel += 'V' num = num-5 if num == 4: #处理4 rel += 'IV' num = num-4 else: for i in range(num): #处理1-3 rel += 'I' return rel 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/integer-to-roman/solution/qing-jiao-zai-xia-wu-qing-de-ifji-qi-by-5crwp/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
13:用了两个字典
代码 class Solution(object): def romanToInt(self, s): """ :type s: str :rtype: int """ dict1 = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000} dict2 = {'IV':4,'IX':9,'XL':40,'XC':90,'CD':400,'CM':900} rel = 0 n = len(s) i = 0 while i < n : if i == n-1: rel += dict1[s[i]] break if s[i:i+2] in dict2: rel += dict2[s[i:i+2]] i += 2 else: rel += dict1[s[i]] i += 1 return rel 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/roman-to-integer/solution/wo-jue-de-bi-shang-ti-nan-by-yizhu-jia-0c6o/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
14:最长公共串
竖向对比
class Solution(object): def longestCommonPrefix(self, strs): """ :type strs: List[str] :rtype: str """ i = -1 flag = 1 while flag == 1: i += 1 for each in strs: try: if each[i] != strs[0][i]: flag = 0 break except: flag = 0 break return strs[0][0:i] 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/longest-common-prefix/solution/meng-xin-ye-neng-ji-bai-bai-fen-zhi-998d-9bsn/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
15 三数和 排序后双指针
class Solution(object): def threeSum(self, nums): """ :type nums: List[int] :rtype: List[List[int]] """ nums = sorted(nums) n = len(nums) if n < 3: return [] #长度3都不够 拿什么来凑0 i = 0 rel = [] while i < n-2: #第一层循环 遍历的是第一个元素。 l = i+1 #l,r是双指针,分别指向另外两个待定的元素。 r = n-1 while r > l: sum3 = nums[i]+nums[l]+nums[r] #计算三个元素和 if sum3== 0: #当和正好为0时 加入到结果中 rel .append([nums[i],nums[l],nums[r]]) l += 1 r -= 1 while nums[l]== nums[l-1] and r>l: #如果左右指针所指元素都是重复的,那么就一直往前后走 l += 1 while nums[r]== nums[r+1] and r>l: r -= 1 elif sum3>0: #¥如果和大于0 右指针左移 r -= 1 while nums[r]== nums[r+1] and r>l: r -= 1 else: #如果和小于0 左指针右移 l += 1 while nums[l]== nums[l-1] and r>l: l += 1 i += 1 #第一个元素遍历完成。左移时注意也不能重复 while nums[i]== nums[i-1] and i < n-2: i+= 1 return rel 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/3sum/solution/wo-qu-wo-jing-ran-yi-ci-jiu-xie-dui-liao-48h4/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
16 三数和2 跟上题 完全没区别啊
class Solution(object): def threeSumClosest(self, nums, target): """ :type nums: List[int] :type target: int :rtype: int """ n = len(nums) i = 0 nums = sorted(nums) mindis = abs(nums[0] + nums[1] +nums[2]-target) tarsum = nums[0] + nums[1] +nums[2] #记录最短距离 while i < n -2: l = i+1 r = n-1 while l < r: sub = nums[i] + nums[l] +nums[r]-target if sub == 0: return target if abs(sub) < mindis: mindis = abs(sub) tarsum = nums[i] + nums[l] +nums[r] if sub > 0: r -= 1 if sub < 0: l += 1 i += 1 return tarsum 作者:yizhu-jia 链接:https://leetcode-cn.com/problems/3sum-closest/solution/gen-shang-yi-dao-ti-yi-mo-yi-yang-dan-sh-b77d/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

浙公网安备 33010602011771号