leetcodepython_LeetCode 答案(python)1-17
1.给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
class Solution:
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
for i in nums:
for j in range(nums.index(i) + 1, len(nums)):
if i + nums[j] == target:
return (nums.index(i),j)
2.给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
你可以假设除了数字 0 之外,这两个数字都不会以零开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#
#
# class Solution:
# # @return a ListNode
# def addTwoNumbers(self, l1, l2):
# if l1 is None:
# return l2
# elif l2 is None:
# return l1
# else:
# carry = 0
# ret = ListNode(0)
# ret_Last = ret
#
# while (l1 or l2):
# sum = 0
# if (l1):
# sum = l1.val
# l1 = l1.next
# if (l2):
# sum += l2.val
# l2 = l2.next
# sum += carry
# ret_Last.next = ListNode(sum % 10)
# ret_Last = ret_Last.next
# carry = (sum >= 10)
# if (carry):
# ret_Last.next = ListNode(1)
# ret_Last = ret.next
# del ret
# return ret_Last
3.给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。
给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。
给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列而不是子串。
# class Solution:
# def lengthOfLongestSubstring(self, s):
# """
# :type s: str
# :rtype: int
# """
# Num = 0
# for j in range(0, len(s)):
# ns = ''
# for i in s[j:]:
# if i not in ns:
# ns = ns + i
# num = len(ns)
# else:
# break
#
# if num > Num:
# Num = num
#
# return Num
4.给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。
示例 1:
nums1 = [1, 3]
nums2 = [2]
中位数是 2.0
示例 2:
nums1 = [1, 2]
nums2 = [3, 4]
中位数是 (2 + 3)/2 = 2.5
# class Solution:
# def findMedianSortedArrays(self, nums1, nums2):
# """
# :type nums1: List[int]
# :type nums2: List[int]
# :rtype: float
# """
# length1 = len(nums1)
# length2 = len(nums2)
# total = length1 + length2
# print(total)
#
# alist = []
# while len(nums1) and len(nums2):
# if nums1[0] < nums2[0]:
# alist.append(nums1.pop(0))
# else:
# alist.append(nums2.pop(0))
# if nums1:
# alist += nums1
# else:
# alist += nums2
# print(alist)
# if total % 2 == 0:
# half = int(total / 2)
# return (alist[half] + alist[half-1])/2
# else:
# half = int(total // 2)
# return alist[half]
5.给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba"也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
class Solution:
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
s='#'+'#'.join(s)+'#'
ff = 0
RL=[0]*len(s)
MaxRight=0
pos=0
MaxLen=0
for i in range(len(s)):
if i
RL[i]=min(RL[2*pos-i], MaxRight-i)
else:
RL[i]=1
#尝试扩展,注意处理边界
while i-RL[i]>=0 and i+RL[i]
RL[i]+=1
#更新MaxRight,pos
if RL[i]+i-1>MaxRight:
MaxRight=RL[i]+i-1
pos=i
#更新最长回文串的长度
# MaxLen=max(MaxLen, RL[i])
ss = s[i - RL[i] + 1:i + RL[i]]
ff = max(len(ss), ff)
if len(ss) >= ff:
a = ss
a = a.replace('#','')
return a
6. 将字符串 "PAYPALISHIRING" 以Z字形排列成给定的行数:
P A H N
A P L S I I G
Y I R
之后从左往右,逐行读取字符:"PAHNAPLSIIGYIR"
实现一个将字符串进行指定行数变换的函数:
string convert(string s, int numRows);
示例 1:
输入: s = "PAYPALISHIRING", numRows = 3
输出: "PAHNAPLSIIGYIR"
示例 2:
输入: s = "PAYPALISHIRING", numRows = 4
输出: "PINALSIGYAHRPI"
解释:
P I N
A L S I G
Y A H R
P I
class Solution:
def convert(self, s, numRows):
"""
:type s: str
:type numRows: int
:rtype: str
"""
if numRows == 1:
return s
ff = []
j = -1
s = list(s)
for i in range(numRows):
ff.append([])
while s!=[]:
while j < numRows-1 and s!=[]:
j += 1
ff[j].append(s.pop(0))
while j > 0 and s!=[]:
j -= 1
ff[j].append(s.pop(0))
s = ''
for i in range(numRows):
s = s + ''.join(ff[i])
return s
7.给定一个 32 位有符号整数,将整数中的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
class Solution:
def reverse(self, x):
"""
:type x: int
:rtype: int
"""
if x < -pow(2,31) or x > pow(2,31)-1:
return 0
s = str(x)
if len(s) == 1:
return x
s = s[::-1]
if s.startswith('0'):
s = s.lstrip('0')
if s.endswith('-'):
s = '-' + s.rstrip('-')
i = int(s)
if i < -pow(2,31) or i > pow(2,31)-1:
return 0
return i
9.判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true
示例 2:
输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。
class Solution:
def isPalindrome(self, x):
"""
:type x: int
:rtype: bool
"""
s = list(str(x))
s1 =list(str(x))
s1.reverse()
if s1 == s:
return True
else:
return False
10.给定一个字符串 (s) 和一个字符模式 (p)。实现支持 '.' 和 '*' 的正则表达式匹配。
'.' 匹配任意单个字符。
'*' 匹配零个或多个前面的元素。
匹配应该覆盖整个字符串 (s) ,而不是部分字符串。
说明:
s 可能为空,且只包含从 a-z 的小写字母。
p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。
示例 1:
输入:
s = "aa"
p = "a"
输出: false
解释: "a" 无法匹配 "aa" 整个字符串。
示例 2:
输入:
s = "aa"
p = "a*"
输出: true
解释: '*' 代表可匹配零个或多个前面的元素, 即可以匹配 'a' 。因此, 重复 'a' 一次, 字符串可变为 "aa"。
示例 3:
输入:
s = "ab"
p = ".*"
输出: true
解释: ".*" 表示可匹配零个或多个('*')任意字符('.')。
示例 4:
输入:
s = "aab"
p = "c*a*b"
输出: true
解释: 'c' 可以不被重复, 'a' 可以被重复一次。因此可以匹配字符串 "aab"。
示例 5:
输入:
s = "mississippi"
p = "mis*is*p*."
输出: false
class Solution:
def isMatch(self, s, p):
"""
:type s: str
:type p: str
:rtype: bool
"""
sLen = len(s)
pLen = len(p)
if (pLen == 0):
return sLen == 0
if (pLen == 1):
if (p == s) or ((p == '.') and (len(s) == 1)):
return True
else:
return False
#p的最后一个字符不是'*'也不是'.'且不出现在s里,p跟s肯定不匹配
if (p[-1] != '*') and (p[-1] != '.') and (p[-1] not in s):
return False
if (p[1] != '*'):
if (len(s) > 0) and ((p[0]==s[0]) or (p[0]=='.')):
return self.isMatch(s[1:],p[1:])
return False
else:
while (len(s) > 0) and ((p[0]==s[0]) or (p[0]=='.')):
if (self.isMatch(s,p[2:])):
return True
s = s[1:]
return self.isMatch(s,p[2:])
11.给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。画 n 条垂直线,使得垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
注意:你不能倾斜容器,n 至少是2。
class Solution:
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
head = 0
tail = len(height) - 1
max_water = 0
while head < tail:
max_water = max(max_water, min(height[head], height[tail]) * (tail - head))
if height[head] < height[tail]:
head += 1
else:
tail -= 1
return max_water
14.编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
示例 1:
输入: ["flower","flow","flight"]
输出: "fl"
示例 2:
输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。
说明:
所有输入只包含小写字母 a-z 。
class Solution:
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if len(strs)==0:
return ""
str=strs[0]
Min=len(str)
for i in range(1,len(strs)):
j=0
p=strs[i]
while j
j+=1
Min = Min if Min
return str[:Min]
15.给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c =0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
满足要求的三元组集合为:
[
[-1, 0, 1],
[-1, -1, 2]
]
# class Solution:
# def threeSum(self, nums):
# """
# :type nums: List[int]
# :rtype: List[List[int]]
# """
# diction = {}
# for num in nums:
# if num in diction:
# diction[num] += 1
# else:
# diction[num] = 1
#
# dictkey = diction.keys()
# pos, neg = [], []
# for p in dictkey:
# if p >= 0:
# pos.append(p)
# else:
# neg.append(p)
#
# sorted(pos)
# sorted(neg)
#
# rsts = []
# rst = []
# if 0 in dictkey and diction[0] > 2:
# rsts.append([0, 0, 0])
# pos.reverse()
# for p in pos:
# for n in neg:
# inverse = -(p + n)
# if inverse in dictkey:
# if (inverse == p or inverse == n) and diction[inverse] > 1:
# rst = [inverse, p, n]
# rsts.append(sorted(rst))
# if inverse > p or inverse < n:
# rst = [inverse, p, n]
# rsts.append(sorted(rst))
#
# return rsts
16.给定一个包括 n 个整数的数组 nums和 一个目标值 target。找出 nums中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
class Solution:
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if len(nums) <= 3:
return sum(nums)
nums.sort()
maxSum = sum(nums[-3:])
minSum = sum(nums[:3])
if target <= minSum:
return minSum
if target >= maxSum:
return maxSum
if target - minSum > maxSum - target:
closet = maxSum
distance = maxSum - target
else:
closet = minSum
distance = target - minSum
for i in range(len(nums) - 2):
left = i + 1
right = len(nums) - 1
while left < right:
s = nums[i] + nums[left] + nums[right]
if abs(s - target) < distance:
closet = s
distance = abs(s - target)
if s > target:
if nums[i] + 2 * nums[left] > target:
break
right -= 1
else:
if nums[i] + 2 * nums[right] < target:
break
left += 1
return closet
17.给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
class Solution:
def __init__(self):
self.dt = {'1':'',
'2':'abc',
'3':'def',
'4':'ghi',
'5':'jkl',
'6':'mno',
'7':'pqrs',
'8':'tuv',
'9':'wxyz',
'0':''}
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
if len(digits) == 0: return []
elif len(digits) == 1: return [s for s in self.dt[digits[0]]]
elif len(digits) == 2:
return [a+b for a in self.dt[digits[0]] for b in self.dt[digits[1]]]
else:
str_list = self.letterCombinations(digits[1:])
return [a+b for a in self.dt[digits[0]] for b in str_list]
leetcodepython_LeetCode 答案(python)1-17相关推荐
- python进阶17炫技巧
原创博客链接:python进阶17炫技巧 原则:可读性第一(效率固然重要,除非非常明显的效率差异,否则可读性优先) 学习炫技巧,更多为了读懂他人代码,自己开发过程中,相似代码量(可读性),建议使用通俗 ...
- python练习题17
python练习题17 输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. string模块主要包含关于字符串的处理函数 upper()负责将指定字符串变为大写,可以单独使用,也可以放 ...
- 蓝桥杯 基础练习全解 答案+解析 共17题 python
关键字 A+B问题,数列排序,十六进制转八进制,十六进制转十进制,十进制转十六进制,特殊回文数,回文数,特殊的数字,杨辉三角形,查找整数,数列特征,字母图形,01字串,闰年判断,斐波那契数列,圆的面积 ...
- Python大数据分析与挖掘实战微课版答案 Python大数据分析与挖掘实战课后答案 例题 课后作业 python题目 python题库 数据分析与挖掘题库 数据分析与挖掘项目
(在此仅展示题目,所有数据.代码.答案.习题等点我头像,在资源中!!!) 以下关于pandas 数据预处理说法正确的是(). A. pandas没有做哑变量的函数 B. 在不导入其他厍的情况下,仅仅使 ...
- python练习题答案,python练习题-答案
<python练习题-答案>由会员分享,可在线阅读,更多相关<python练习题-答案(16页珍藏版)>请在人人文库网上搜索. 1.Python练习题库By 郑红波 2017- ...
- python程序设计机械工业出版社课后答案-Python语言程序设计
图书简介 本书以问题驱动的方式对Python程序设计进行综合介绍.全书共分三个部分,首先介绍基本程序设计技术以及数据类型.变量.常量.简单函数等内容,随后利用抽象.封装和多态性来了解面向对象程序设计, ...
- python编程快速上手项目答案-python编程快速上手之第5章实践项目参考答案
1 #!/usr/bin/env python3.5 2 #coding:utf-8 3 #5.6.1 4 #好玩游戏的物品清单 5 #给定一个字典,包含物品名称和数量,并打印出数量对应的物品 6 7 ...
- python编程15讲答案,[Python编程:从入门到实践] 第十五章:生成数据 习题答案
Python 小白提交答案,有不足请老鸟们指点,谢谢~ 15-8 同时投掷三个骰子:如果你同时掷三个D6骰子,可能得到的最小点数为3,而最大点数为18,.请通过可视化展示同时掷三个D6骰子的结果 &q ...
- python语言程序设计2019版第二章课后答案-python语言程序设计基础课后答案第二章...
python语言程序设计基础课后答案第二章 以下合法的用户自定义标识符是____________. 导入模块或者模块中的元素要使用关键字________ . 下列哪个函数是用来控制画笔的尺寸的____ ...
最新文章
- 大量POI点展示的一种解决方案
- kubernetes集群配置dns服务
- 大咖说:React Native 全埋点实现原理(内附赠书)
- 基于mondrian的多维分析系统
- 【C++】For循环同时初始化两个变量
- InnoDB文件系统
- jquery06 jQuery.extend 给jQuery函数添加、继承 静态方法
- Java线程中断理解(interrupte)
- Matlab系列教程_基础知识_运算符
- 简账(开源记账软件)-后端环境简介及部署
- IO前哨站之##File##
- Linux开发环境搭建与使用——Linux简史
- 语音识别 卷积神经网络,卷积神经网络字符识别
- java 繁体转简体_java 中文繁简体转换工具 opencc4j
- 常见文件头 文件幻数
- Spring集成JPA提示Not an managed type
- 微信封面怎么设置?微信主页面的背景怎么设置
- 前端调用微信扫一扫不触发事件,没有任何反应
- 力天创见客流、热区系统WEB管理
- ERROR dispatch for GET /error?thingName=lxyrequestId=123, parameters={masked}
热门文章
- php excel导入数据库显示乱码,php修改excel表格数据库数据格式-使用phpexcel导入excel表格数据到MYSQL,乱码怎么解决...
- html5 PHP 分片上传,H5分片上传含前端JS和后端处理(thinkphp)
- 虚拟机如何装linux6,如何在vmvare中安装redhat linux6虚拟机
- java字符相似_JAVA 获取两个字符串的相似度
- C语言题库青岛理工大学,青岛理工大学C语言期末复习题库.doc
- vue调用函数怎么传参_Vue(非)父子组件的传值以及方法调用
- 【转】Zookeeper入门
- 简单介绍CUDA中loop unrolling(循环展开)技术
- 北京科技大学计算机与通信工程学院计算机科学与技术系导师研究方向,北京科技大学计算机科学与技术系硕士生导师孙昌爱_计算机考研导师...
- servlet对java的重要性_浅谈Servlet技术中的Listener起到的作用