算法
计算机动物
程序人生
展开
-
Python实现最短路径Dijkstra算法
class Graph_matrix(object): def __init__(self): self.storage_matrix = [] self.node_list = [] def make_picture(self, matrix, _nodes): ''' :param matrix: 输入邻接矩阵...原创 2018-10-12 16:46:57 · 4445 阅读 · 0 评论 -
leetcode107. 二叉树的层次遍历 II
简单题,下班之前闲着没事水了一道,方法也不优雅主要思路就是记录每层节点数,配合队列que去实现class Solution(object): def levelOrderBottom(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ ...原创 2018-11-23 18:51:42 · 165 阅读 · 0 评论 -
leetcode103. 二叉树的锯齿形层次遍历
简单题,方法也不优雅,LeetCode107改改就行了,锯齿形就是掌握好层和节点左右顺序就好class Solution(object): def levelOrderBottom(self, root): """ :type root: TreeNode :rtype: List[List[int]] """ ...原创 2018-11-23 19:01:36 · 95 阅读 · 0 评论 -
leetcode102. 二叉树的层次遍历
简单题,下班水的,方法不优雅,博客里LeetCode107改改就好了# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right ...原创 2018-11-23 19:06:19 · 93 阅读 · 0 评论 -
leetcode71-简化路径
借用栈去解决,按照' / '分割字符串, 遇到 ' . ' 以及空字符跳过,遇到' .. '从栈里弹出元素,其余入栈,最后如果栈空应该返回一个' / ' class Solution(object): def simplifyPath(self, path): """ :type path: str :rtype: str ...原创 2018-11-25 16:46:36 · 144 阅读 · 0 评论 -
组合算法-----0~1置换法
组合算法里0~1置换个人认为是个比较不错的思路,举个例子各位看官就明白了,很好理解举例:对于[1,2,3,4,5],的3个数的组合初始一个0~1数组 1,1,1,0,0 因为是5个人数里找3个数,所以初始前三个是1 1,1,0,1,0 遇到第一个10,把1、0位置置换,同时这个10的前面都是1(如果有1也有0还要进行其他...原创 2018-11-24 23:22:10 · 407 阅读 · 0 评论 -
leetcode78. 子集
就是组合算法,详细看我的另一篇非递归组合算法class Solution(object): def combination(self,num_list, n): length = len(num_list) init_list = [1] * n + [0] * (length - n) start = True res...原创 2018-11-25 13:56:29 · 114 阅读 · 0 评论 -
组合算法------非递归
这种方法相当于每次从数组里取一个元素和result里的所有列表元素相加,列表元素里长度大于等于n的(挑选出n个数的组合)就没有和元素相加的意义了,用不到。长度小于n的都会被用到,最后对result里的元素过滤一下,只保留长度是n的。def combination_add(num_list,n): result = [[]] for i in num_list: ...原创 2018-11-25 14:32:36 · 607 阅读 · 0 评论 -
LeetCode69 X的平方根
已AC,简单题思路:用代码实现手动开平方竖式的过程 竖式解的详细步骤参考这里:https://jingyan.baidu.com/article/f0e83a258d02d522e4910154.html 代码中的第一个for循环是将被开方数转化成可执行竖式的列表(具有一定规范,从低位到高位两个数字一组,最高位也可自成一组) 其余部分看懂竖式就可以理解了# -----------...原创 2018-10-26 00:58:44 · 137 阅读 · 0 评论 -
leetcode46 全排列算法
插入法实现全排列算法,Python语言描述思路:给定一个待排列数组nums,如nums=[1,2,3]。定义一个保存结果的二维数组 result=[ [ ] ] 顺序的每次从nums中取一个元素num,从result弹出一个待插入列表(出队),将num插入进去。 如result弹出一个待插入列表是[ 1 ],num=2。这时有两种插入情况,分别是insert(0, num) 和 ins...原创 2018-10-21 19:08:32 · 258 阅读 · 0 评论 -
LeetCode20 有效的括号
AC代码,Python语言描述思路:用一个栈来存放符号,遍历一次字符串s,当字符i为'( '、' { '、' [ '的时候入栈,当字符i为')'、' } '、' ] '出栈,出栈元素记为j 当出栈元素j与字符i不属于同一对括号时return False,结束程序 当出栈时超过栈索引return False,结束程序 最后检查栈是否为空,为空return True,结束程序。否则ret...原创 2018-10-22 11:54:59 · 135 阅读 · 0 评论 -
原创非递归实现全排列算法
Python语言描述空间换时间的做法,借助队列去实现全排列# ---------借助队列去实现全排列(原创)---------from copy import copyclass Per_node(object): def __init__(self,elements): ''' :param elements: 元素列表 '...原创 2018-10-17 16:51:53 · 334 阅读 · 0 评论 -
LeetCode17 电话号码的字母组合
已经AC,Python语言描述思路:为2~9的电话号码建立哈希表,队列result 初始存放输入的数字字符串首位数字对应的字母列表,如:result=[' a', ' b', ' c' ] 队列弹出后与数字字符串的下一位数字对应的字母列表逐个拼接后在入队 这里有个小的需要注意的地方,就是Python的拷贝、‘=’ 引用的区别。因为没有注意到这个问题,当数字字符串里有相同字符时一直提...原创 2018-10-22 16:06:07 · 671 阅读 · 0 评论 -
模拟竖式的大数相乘---Python实现
def big_data_multiply(num_1,num_2): #print num_1*num_2 num_1_list = [int(i) for i in str(num_1)] # 相当于竖式的下一层 num_2_list = [int(i) for i in str(num_2)] # 相当于竖式的上一层 result = [0]*len(num...原创 2018-10-20 10:13:50 · 982 阅读 · 1 评论 -
leetcode41 缺失的第一个正整数
Python语言描述,已经通过。思路:min_num是缺失的最小正整数最开始设为1。 每次遍历数组,用数组里的数去减min_num,如果差为0结束for循环,证明数组里有min_num,min_num加1。 如果遍历之后差tmp始终不为零,证明此min_num是最小的未出现正整数,return min_num,结束程序。class Solution(object): def...原创 2018-10-20 21:15:21 · 144 阅读 · 0 评论 -
LeetCode65 有效数字
已AC,Python语言描述看到这道题的时候发现这道题的级别是困难,通过率也才11.7%。(可能各位大佬不屑于做这道题???)这道题也确实无非就是情况考虑的全面一些,然后就可以AC,可能也是因为我用Python提交的吧(总感觉自己作弊了。。。。。)思路:先把字符串首尾去空格(用了Python的 strip() 方法) 如果字符串中还有空格,直接返回false 此时字符串中是不包含空...原创 2018-10-25 09:07:51 · 499 阅读 · 0 评论 -
leetcode66 加一
简单题,已AC思路:设置初始进位是1,从后向前遍历列表 每一位都与进位相加再对10取模( sum % 10 ),进位也相应更新为相加后取商(sum / 10) 循环过后如果进位不为0,就把进位插入到列表的第一位# ------------- 加一 -----------class Solution(object): def plusOne(self, digits): ...原创 2018-10-25 10:00:28 · 143 阅读 · 0 评论 -
Leetcode73 矩阵置零
已AC, 中等题思路:设置两个集合,line_set,row_set分别存放矩阵中0所在的行和列,使用集合是避免重复遍历 第一次遍历二维数组,将相应数字装入集合 第二次遍历将两个集合里的行列全部置零我的这种方法虽然通过,但是可能与题意不是很符合,题目要求原地算法,我额外占用了集合的空间应该是属于违规的,不借助额外空间也是可以的:每次遍历遇到0就把他所在的行列置位其他数字或字符比如...原创 2018-10-28 10:31:43 · 146 阅读 · 0 评论 -
leetcode165-比较版本号
这个简单,下班前水的,不说了放代码吧class Solution(object): def compareVersion(self, version1, version2): """ :type version1: str :type version2: str :rtype: int """ ...原创 2019-01-30 18:40:26 · 254 阅读 · 0 评论