算法
宁宁Fingerstyle
尺璧非宝,寸阴是竞。
展开
-
十进制数转化为二进制数的两种方法
如果我们要把十进制的150转化为二进制数,可以使用下面两种方法:第一种方法:表格法这种方法的核心思想就是用二进制的各位来“拼凑”出我们的十进制数。我们先把二进制各位的位权列在表格里面。(我们如何知道要列多少位出来呢?其实我们就是要列到比150小并且最接近150的那一位,也就是列到128就可以了。)128 64 32 16 8 4 2 1 然后我们从左...原创 2020-12-29 21:14:52 · 51209 阅读 · 8 评论 -
Python广度优先搜索寻找朋友圈中关系最近的律师
一、问题描述该问题受《算法图解》第6章寻找朋友圈中的芒果销售商启发,但是在它的基础上做了一些优化,使用了一些很棒的工具以及巧妙的方法(参考classic computer science problems in Python)。下面请看具体描述:如果我们列出自己的朋友们以及每个人的职业,然后再列出朋友的朋友以及他们的职业,以此类推,向外围扩展,这样就得到了一个包含各种职业的朋友圈。现在,在这张关系网络里,我想找到距离我最近的律师。这里所谓的“距离”不是物理上的距离,而是人际关系上的距离。如果A是原创 2020-06-19 19:27:55 · 242 阅读 · 0 评论 -
Python实现二叉树的前序遍历(递归+借助栈的迭代)
目录一、问题描述二、递归实现前序遍历三、迭代实现前序遍历一、问题描述二叉树前序遍历的顺序是“根左右”,以下面这棵二叉树为例,前序遍历的结果应该是[1,2,4,5,3]要确保自己会使用纸笔对二叉树进行前序遍历,然后再往下看。下面是自定义的二叉树结点类:class TreeNode: '''二叉树结点类''' def __init__(sel...原创 2020-04-30 10:59:43 · 1100 阅读 · 0 评论 -
Python递归实现枚举排列(给定一个元素不重复的列表,返回这些元素所有的排列形式)
一、问题描述如果我们有一个列表[1,2,3],我们很清楚地知道,这里面元素的所有排列如下:[1,2,3][1,3,2][2,1,3][2,3,1][3,1,2][3,2,1]因为问题规模比较小,手动写出结果不难。我们可以回顾一下枚举的思路,其实主要就是两点:每个元素都要做排头兵 除了排头兵以外,剩下的元素也要穷尽所有的排列基于这样的思路,我们很容易想到用递归...原创 2020-03-19 21:16:08 · 1903 阅读 · 0 评论 -
Python实现中缀表达式求值
一、思路有些类似于先把中缀表达式转化为后缀表达式,然后再对后缀表达式求值。但是因为我们最终只需要求出来的值,不想得到后缀表达式,所以就一边遍历一边计算了。关键点在于,我们借助两个栈,一个栈存放操作数,一个栈存放运算符。每次计算都是从运算符栈弹出一个运算符,从操作数栈弹出两个操作数,计算后的结果压回操作数栈。二、代码实现def infix_evaluator(infix_express...原创 2019-12-26 19:13:56 · 5026 阅读 · 2 评论 -
Python实现递归求解两个数的最大公约数
一、思路分析求两个数的最大公约数,可以用欧几里得算法(辗转相除法。)其基于的定理是:两个数的最大公约数等于较小的那个数和这两个数相除的余数的最大公约数。假设这两个数是a和b,其中,a大于b,a%b的值是r,那么a和b的最大公约数等于b和r的最大公约数。所以我们为了求出两个数的最大公约数,就要先用a和b取模(余数),再用b和模取模……一直循环下去。直到模为0,那么最后一次的除数就是最大公约数...原创 2019-05-22 11:02:25 · 17729 阅读 · 4 评论 -
Python求解两数之和
题目描述:写一个函数,此函数要实现以下功能:给一个列表,并且给一个目标数字,如果列表里的两个数字之和等于目标数字,返回那两个数字的索引值。比如,给定列表[3,5,7,14],目标数字是10,那么返回[0,2],0是3的索引,2是7的索引,3+7=10.注意,不可以重复利用列表中的某个数字,比如返回[1,1]是不能接受的。一、两层for循环遍历列表思路:先拿出列表里的第0个数...原创 2019-07-01 13:32:48 · 12094 阅读 · 0 评论