【LeetCode】Python之旅 1-2
#由于是starter,参考大神的python解法(http://vimersu.win/blog/2014/03/20/leetcode-solution-02/ 作者: Vimer Su)并另做详细阐述
1.Two Sum
题意:给定一个target值,如果数组中的两个数t1、t2相加为target,返回这两个数在数组中的下标。(下标从0开始)
分析:使用一个字典保存数组的值及其下标(形成键值对),遍历数组nums[],如果字典键target-nums[i]的值不存在,则保存其下标;存在则说明t1已经被找到,且目前i指向t2的下标,返回t1的字典值和i即可
代码:
1 class Solution(object): 2 def twoSum(self, nums, target): 3 dict={} 4 for i in range(len(nums)): 5 if dict.get(target-nums[i],None) == None: 6 dict[nums[i]] = i 7 else: 8 return (dict[target-nums[i]],i) 9 10 p=Solution() 11 nums=[2,7,11,15] 12 target=9 13 p.twoSum(nums,target)
2.Add Two Numbers
其实感觉这个比上题还简单一些~
题意:例如,一个链表保存2->4->3,一个链表保存5->6->4,输出342+564=807即7->0->8,数字都是倒序
分析:对位相加,设置进位位,重点在于如何写单链表
代码:
1 # Definition for singly-linked list. 2 # class ListNode(object): 3 # def __init__(self, x): 4 # self.val = x 5 # self.next = None 6 7 class Solution: 8 # @return a ListNode 9 def addTwoNumbers(self, l1, l2): 10 nHead, flag = ListNode(0), 0 11 head = nHead 12 while flag or l1 or l2: 13 node = ListNode(flag) 14 if l1: 15 node.val += l1.val 16 l1 = l1.next 17 if l2: 18 node.val += l2.val 19 l2 = l2.next 20 flag = node.val // 10 21 node.val %= 10 22 head.next, head = node, node 23 return nHead.next
这题很久才AC,后来问了小若然,原来头部对于链表class的注释不要删...不然就会抛出异常(Exception: Type <class '__main__. '>: Not implemented),它这个只是告诉你它的测试平台就是这么定义的。然后也并不需要自己写测试代码(这可能也是为什么我写了测试代码print会打印两遍的原因),后台会自动调用你写的这个类的(因此也千万不要改掉它的类名)。对此,小若然表示这很leetcode,就是这样对新手不友好TAT
2+.第2题的改编,即如果链表顺序是3->4->2和4->6->5,则需要先将链表逆序再相加,才能保证从低位向高位运算,关键在于单链表逆序的reverse函数,参考http://blog.csdn.net/u011608357/article/details/36933337
代码:
1 class ListNode(object): 2 def __init__(self, x): 3 self.val = x 4 self.next = None 5 6 7 def reverse(head): 8 if head is None or head.next is None: 9 return head 10 pre = None 11 cur = head 12 h = head 13 while cur: 14 h = cur 15 tmp = cur.next 16 cur.next = pre 17 pre = cur 18 cur = tmp 19 return h 20 21 22 class Solution(object): 23 def addTwoNumbers(self, l1, l2): 24 newl1=reverse(l1) 25 newl2=reverse(l2) 26 nHead, flag = ListNode(0), 0 27 head = nHead 28 while newl1 or newl2 or flag: 29 node = ListNode(flag) 30 if newl1: 31 node.val += newl1.val 32 newl1 = newl1.next 33 if l2: 34 node.val += newl2.val 35 newl2 = newl2.next 36 flag = node.val // 10 37 node.val %= 10 38 head.next, head = node, node 39 newHead = reverse(nHead) 40 print newHead.val 41 print newHead.next.val 42 print newHead.next.next.val 43 44 l1 = ListNode(2) 45 l1.next = ListNode(4) 46 l1.next.next = ListNode(3) 47 l2 = ListNode(5) 48 l2.next = ListNode(6) 49 l2.next.next = ListNode(4) 50 p = Solution() 51 p.addTwoNumbers(l1, l2)
单链表逆置:把cur指向当前节点,pre指向前一节点,把cur.next保存到临时变量tmp,然后cur的next指向pre,然后pre取代现在的cur,cur指向tmp,继续循环此过程。另外注意h保存头结点。
今天看到知乎上轮子哥说可以按照通过率从高到低来做,觉得是个好主意...尤其对于我这样的python入门者来说。
344.Reverse String
1 class Solution(object): 2 def reverseString(self, s): 3 """ 4 :type s: str 5 :rtype: str 6 """ 7 length = len(s) 8 s1 = [] 9 for i in range (0,length): 10 s1.append('0') 11 for i in s: 12 s1[length-1] = i 13 length -= 1 14 s1 = ''.join(s1) 15 return s1
这里主要记住一个,python中字符串和字符串数组的相互转换方法:
字符串数组转字符串:['x','y','z'] => 'xyz'
b = ''.join(['x','y','z'])
字符串转字符串数组:'xyz' => ['x','y','z']
a = list('xyz')
转载于:https://www.cnblogs.com/Rivrr/p/5649022.html
【LeetCode】Python之旅 1-2相关推荐
- Leetcode python《热题 HOT 100》15. 三数之和
Leetcode python 之 <热题 HOT 100>:https://leetcode-cn.com/problemset/hot-100/ 15. 三数之和 给定一个包含 n 个 ...
- Leetcode python《热题 HOT 100》1. 两数之和
Leetcode python 之 <热题 HOT 100>:https://leetcode-cn.com/problemset/hot-100/ 1. 两数之和 给定一个整数数组 nu ...
- LeetCode Python实现 二叉树简单部分
LeetCode Python实现 二叉树简单部分 ''' 1 二叉树的最大深度 给定一个二叉树,找出其最大深度.二叉树的深度为根节点到最远叶子节点的最长路径上的节点数.说明: 叶子节点是指没有子节点 ...
- LeetCode Python实现 链表简单部分
LeetCode Python实现 链表简单部分 我以前完全没有写过关于链表的东西,node.val=node.next.val#当前值被后一个值覆盖node.next=node.next.next# ...
- 开启python之旅
1.python安装 Anaconda安装地址:https://www.anaconda.com/ 2.Pycharm安装 Pycharm安装地址:https://www.jetbrains.com/ ...
- python寻峰,[LeetCode][Python]162. 寻找峰值
[LeetCode][Python]162. 寻找峰值 峰值元素是指其值大于左右相邻值的元素. 给定一个输入数组 nums,其中 nums[i] ≠ nums[i+1],找到峰值元素并返回其索引. 数 ...
- LEETCODE | PYTHON | 剑指 Offer 58 - Ⅱ | 左旋转字符串
LEETCODE | PYTHON | 剑指 Offer 58 - Ⅱ | 左旋转字符串 1. 题目 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部.请定义一个函数实现字符串左旋转操作 ...
- LEETCODE | PYTHON | 724 | 寻找数组的中心下标
LEETCODE | PYTHON | 724 | 寻找数组的中心下标 1. 题目 给你一个整数数组 nums ,请计算数组的 中心下标 . 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等 ...
- 开启我的Python之旅
开启我的Python之旅 有人说,"聪明的人喜欢阅读,智慧的人喜欢写作".而我,既不是那种才高八斗,疯狂阅读的人,也不是那种激扬文字,热衷于写作的人.我就是我--一个平凡的我,一个 ...
- 寒假Python之旅final part
寒假Python之旅final part 看到一个认识的人一天13小时高强度写代码,顿时感觉十分羞愧.我怎么这么弱啊.jpg已经鸽.了两天了哦草.不过看起来我很快就能实际运用了) 2.17 第 1 ...
最新文章
- 人类大脑神经如何进化?寄生虫充当了隐形设计师
- 安全开发之碰撞检测与伤害计算逻辑
- Jenkins Job Buidler
- aspen二元体系共沸组分_超详细 | 手把手教你组分结构预测
- ttf能改成gfont吗_中国废弃轮胎,被非洲人买去做成凉鞋!15元一双,至少能穿10年...
- RS485串口光端机产品功能特点介绍
- excel文件被写保护怎么解除_u盘被写保护怎么解除,看完你就知道了
- sh文件进行qsub提交任务到远程服务器训练
- 剑指offer——面试题26:复杂链表的复制
- LINUX编译json-c错误的解决:autoreconf找不到,json_tokener.c报错
- 中国石油大学《安全行为学》第三阶段在线作业
- PHP框架高级编程——应用Symfony、CakePHP和Zend
- matlab常用开头,在MATLAB编辑中,以“”开头的表示()。
- [Linux] SPI 设备驱动模型(以 Ad714x CapTouch 驱动分析)
- Python argparse.ArgumentParser的add_argument()用法
- IE 浏览器 判断 增加 支持 IE8 IE9 IE10 IE11等 IE浏览器(是不是IE浏览器判断)
- Java学习之路01——2021年职业规划
- 明天帮人拍照---婚礼摄影备课[zt]
- 学习人工智能需要参加哪些课程或培训,如何选择?
- Android Studio使用Mob获取手机验证码
热门文章
- Java和C语言动态构造int数组
- torch-1.6.0+cu92-cp38-cp38-linux_x86_64.whl is not a supported wheel on this platform.
- WPS For Linux
- 在Python中从头开始迭代本地搜索
- 二叉树前序中序后序javascript_详解二叉树遍历(前序、中序、后序、层次遍历、深度优先、广度优先)...
- 用计算机用语说唯美的话,好听唯美的说说句子
- python服务端处理post请求_使用JSON处理GET和POST请求的简单Python服务器
- linux shell 字典 定义 新增元素
- Dell服务器如何重装操作系统 windows server
- 区块链 试题_区块链期末复习四