LeetCode刷刷题(一)
进来工作不是很饱和,有空去LeetCode上刷刷题,随手记录一下
两数之和
题目形容:
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
比方:
给定 nums = [2, 7, 11, 15], target = 9
由于 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
答案如下:
class solution(): def twosum(self,nums,target): length = len(nums) print(length) i = 0 while i < length: other = target - nums[i] for j in range(i + 1, length): if other == nums[j]: return (i, j) i += 1if __name__=='__main__': s=solution() a,b=s.twosum([3,5,4,8],7) print(a,b) ----0,2反转整数
题目形容:
给定一个 32 位有符号整数,将整数中的数字进行反转。
比方:
输入: 123 -123 120
输出: 321 -321 21
这边有个坑, 32 位有符号整数,其数值范围是 [?2^31, 2^31 ? 1],有些数尽管一开始在区间内,但是一反转之后超出范围,对于这些超出范围的数,也返回0
答案如下:
class solution(): def reverseint(self,x): if x <= -(2 ** 31) or x >= 2 ** 31 or x == 0: return 0 else: num = str(x) if num[0] == '-': num = "-" + num[::-1][:-1] i = 0 while i < len(num): if num[1] == 0: num = num[0] + num[2:] else: break i += 1 if int(num) <= -(2 ** 31): return 0 else: return int(num) else: num = num[::-1] i = 0 while i < len(num): if num[0] == '0': num = num[1:] else: break i += 1 if int(num) >= 2 ** 31: return 0 else: return int(num)if __name__=='__main__': s=solution() a = s.reverseint(1534236469) print(a) ---- 0回文数
题目形容:
判断一个整数能否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数
输入: 121 -121
输出: true false
简单一点可以转换为str之后,利使用步进切片,判断能否一致,有点相似上个题目。
这边要求不转换为str
答案如下:
class solution(): def isPalindrome(self,x): # x=str(x) # return x == x[::-1] pre=x back=0 while pre >0: back = back*10 + pre %10 pre = pre // 10 return back == xif __name__=='__main__': s=solution() a=s.isPalindrome(124421) print(a) ---True移除元素
题目形容:
给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
不要用额外的数组空间,你必需在原地修改输入数组**并在用 O(1) 额外空间的条件下完成。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
给定 nums = [0,1,2,2,3,0,4,2], val = 2,
函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。
注意这五个元素可为任意顺序。
答案如下:
class Solution(): def removeElement(self,nums, val): """ :type nums: List[int] :type val: int :rtype: int """ i=0 while i < len(nums): if nums[i] == val: del(nums[i]) continue i+=1 print (nums)if __name__=='__main__': s=Solution() nums=[1,2,3,4,5,1,3,7,4,3,2] val=2 s.removeElement(nums,val) ---- [1, 3, 4, 5, 1, 3, 7, 4, 3]删除排序数组中的重复项
个人觉得这个就是上一个的更新版
题目形容:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要用额外的数组空间,你必需在原地修改输入数组并在用 O(1) 额外空间的条件下完成。
给定 nums = [0,0,1,1,1,2,2,3,3,4],
函数应该返回新的长度 5, 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。
答案如下:
class solution(): def removeduplicate(self,A): i=0 while i < len(A)-1: if A[i] == A[i+1]: del(A[i]) continue i+=1 return Aif __name__=='__main__': s=solution() nums = [0,0,1,1,1,2,2,3,3,4] a=s.removeduplicate(nums) print(a)暂时就写这么多,后面继续刷,继续写。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » LeetCode刷刷题(一)