摘要:
题目比较清晰,简单来说就是: | A | B | C | D | | | | | | | E | F | G | H | | I | J | K | L | 只能往右或者往下,从A到L,能有几种走法。 这里使用动态规划的方法来做一下。 动态规划最重要的就是动态方程,这里简单说下这个动态方程怎么做出来 阅读全文
摘要:
提交leetcode的时候遇到了问题,一直说访问越界,但仔仔细细检查n多遍,就是检查不出来。 因为我用到了count全局变量,自加一来表明当前数组访问的位置, 后来突然想到,是不是在leetcode在运行测试用例的时候,是连续测试的,用的同一个上下文,这样的话,就没有对这个全局变量清零…… 果然,清 阅读全文
摘要:
上一篇说了使用位运算来进行子集输出,这里使用回溯的方法来进行排序。 回溯的思想,我的理解就是: 把解的所有情况转换为树或者图,然后用深度优先的原则来对所有的情况进行遍历解析。 当然,因为问题中会包涵这各种各样的限制条件,我们可以用这些限制条件去减少遍历的分支。 其实,比较著名的就是0 1背包问题,这 阅读全文
摘要:
看一个数组的子集有多少,其实就是排列组合, 比如:[0,1] 对应的子集有:[] [0] [1] [1,1] 这四种。 一般对应有两种方法: 位运算 和 回溯 。 这里先使用位运算来做。 位运算 一个长度为n的数组,对其做排列组合,可以理解为:这n个数字中,有哪些是存在的,哪些是不存在的。 例如,数 阅读全文
摘要:
栈:先入后出,后入先出 像电梯一样,先进入电梯的,走到电梯最深处,后进入电梯的,站在电梯门口, 所以电梯打开的时候,后进入的会先走出来,先进入的会后走出来。 push,对应入电梯,把数据往里面压 pop, 对应出电梯,把数据往外拿 栈顶,对应电梯门口 栈底,对应电梯最深处 这里使用链表实现栈。 先创 阅读全文
摘要:
这里使用两种方式, 一个是直接从头往后遍历 迭代 一个是从最后一个往前遍历 递归 迭代 定义三个变量:pPre pNext pNow pPre表示当前节点的前一个地址,pNext表示当前节点的下一个地址,pNow表示当前节点的地址。 反转的核心:就是把 pNow的next指针,指向 pPre 因为反 阅读全文
摘要:
依然使用递归思想。 思路: 1、树的深度 = max (左子树深度,右子树深度)+ 1 。 这里的加1是表示自己节点深度为1。 2、如果当前节点为null,则说明它的左右子树深度为0。 阅读全文
摘要:
这玩意儿基本上还是遍历的那一套, 这里使用先序遍历的方式,直接对左右子树进行对调即可。 (虽然看题目的时候,感觉都一样,但真正写出来之后,印象还是深刻了很多) 阅读全文
摘要:
合并,就是两个树的结构交集部分,数据相加,否则,取非空部分。 所以,这里相当于是对两棵树同时遍历: 如果两棵树节点都不为空,则数据相加, 否则,直接指针把不为空的节点复制过来。 注:这里没有申请内存,而直接对原有的树进行改造,这样可以节省申请内存的时间,且节省一些内存。 阅读全文
摘要:
很多题目涉及到二叉树,所以先把二叉树的一些基本的创建和遍历写一下,方便之后的本地代码调试。 为了方便,这里使用的数据为char类型数值,初始化数据使用一个数组。 因为这些东西比较简单,这里就不做过多详述。 创建 1、定义一些内容: 2、使用递归方式创建原始二叉树。 其基本思想与先序遍历基本一样,只不 阅读全文