leetcode第一刷_Length of Last Word】的更多相关文章

不是非常明确出题人的意图,事实上这道题用java的话简直是太简单了,用split处理一下,得到全部单词的一个数组,然后求最后一个的长度即可了.我个人认为java里最成功的函数就是split了,我做project时差点儿总能用到它,方便强大. c++里面略微复杂一些,只是这也算是最简单的字符串的问题了.函数的接口决定了字符串的长度是未知的,要自己循环找一下,然后从尾向头找不等于空格的字符,找到了就找到了最后一个单词,然后累计直到空格结束. class Solution { public: int…
这道题非常难. 之前的题目我提到过一次用两个vector来做层序遍历的,就是由于这道题.要想最后恢复出单词变换的路径,就须要事先保存,依据dp中路径恢复的启示,保存的应该是一个单词的前一个变换节点.可能有非常多个单词都能变换到当前单词,因此应该是一个set.用一个二维的vector保存当前能够变换到的单词和变换出这些单词单词.每一维的vector存放的都是一个set.设存放当前可訪问单词的vector下标是current,存放变幻出这些单词的vector下标是pre,那么每一轮要開始更新curr…
这个题乍一看非常easy,实际上还挺有技巧的.我最開始的想法是找一个特殊值标记.遇到一个0,把他所相应的行列中非零的元素标记成这个特殊值.0值保持不变,然后再从头遍历一次,碰到特殊值就转化成0. 问题是这个特殊值怎么确定,题目中没有把取值范围给出,我怀着侥幸的心理用了最大和最小的int,都被揪了出来..假设找一个不存在于数组中的值,这个复杂度太高了. 有没有其它更好的方法呢?当然有.这个思想非常巧妙,最后的结果是把所有0所在的行列都化成0,换句话说.化成0这个事情仅仅要标记出是哪一行以及哪一列就…
当有反复元素的时候呢? 不用拍脑袋都会想到一种方法,也是全部有反复元素时的通用处理方法,维护一个set,假设这个元素没增加过就增加,增加过了的忽略掉.可是,在这道题上这个通用方法竟然超时了! 怎么办?想一下为什么会这样,如果我们要排列的数字是1111112,当当前的排列中没有1时,取哪个1生成一遍,都是一样的.仅仅有当前面的1都用过了,必须轮到这个1出场的时候,它才会有价值.更明白一点说,如果我们要在生成的排列中放两个1,那么这两个1是原来的哪两个根本无所谓,不断的选,终于的结果肯定一样,可是当…
很自然的推广,假设去掉全然二叉树的条件呢?由于这个条件不是关键,因此不会影响整体的思路.做法依旧是每次找到一层的起点,然后一层一层的走. 假设是全然二叉树的话,每层的起点就是上一层起点的左孩子,兄弟之间的链接也简单,直接找相应父亲的左右孩子就可以. 一般二叉树时,起点应该是上一层第一个有孩子节点的左孩子,或者没有左孩子时.是他的右孩子. 为了能在孩子层中不断链接,我们必须保存当孩子层的前一个节点,当当前层找到一个节点有孩子,就接到这个pre节点后面,然后更新pre节点的指向. class Sol…
看到这个题我就伤心啊,去微软面试的时候,第一个面试官让我做的题目就是实现集合的交操作,这个集合中的元素就像这里的interval一样.是一段一段的.当时写的那叫一个慘不忍睹.最后果然被拒掉了. .好好练习算法,争取正式招聘的时候拒一次微软.哈哈~ 说归说,这道题事实上还是比較简单的.先考虑什么样子的集合是能够合并的.设两段集合是[a, b]和[c, d],不失一般性的,如果a<c,那么有以下几种情况: 1. b<c,这说明两段是全然不相交的,没办法合并. 2. b>=c&&…
八皇后问题应该是回溯法的教学典范.在本科的时候,有一门课叫面向对象.最后的附录有这个问题的源码.当时根本不懂编程,照抄下来,执行一下出了结果都非常开心,哎. 皇后们的限制条件是不能同行同列,也不能同对角线. 那么显然每一列上都要有一个皇后,仅仅须要用一个一维数组记录皇后在每一行上的位置就能够了. 算法的思想是:从第一行開始,尝试把皇后放到某一列上,能够用一个vis数组保存已经有皇后的列,当找到一个还没有皇后的列时,就尝试着把当前皇后放上,然后看看有没有之前放好的皇后跟这个皇后同对角线,假设同对角…
说到格雷码,应该没人不知道,详细它有什么用,我还真不是非常清楚,我室友应该是专家.生成的规律不是非常明显,之前看到帖子讲的,这会儿找找不到了.. 思想是这种,假设有n位,在第2^(n-1)个编码以下画一条水平线的话,你会发现除了第一位之外,其它位都是关于这条线对称的,例如以下,以三位格雷码举例: 000 001 011 010 --------------------- 110 111 101 100 非常奇妙吧,我曾经是不知道这个规律的.从一開始的一位格雷码,0,1,開始,每次对称的在上一个前…
啊啊啊啊.好怀念这样的用递归保存路径然后打印出来的题目啊.好久没遇到了. 分了两种,一种是能够反复使用数组中数字的,一种是每一个数字仅仅能用一次的.事实上没有多大差别,第一种每次进入递归的时候都要从头開始尝试.另外一种要找一个标记的数组,把已经用到过的排除掉,就像生成全排列时的做法一样. 跟我一样用引用保存中间结果的话.要注意回退的情况. 另外一种回退时,要把用到的那个数也恢复为可用,就全然像全排列时做的一样.破例贴两个题的代码.由于他们是在是不值得用两片文章来写. class Solution…
最小编辑距离.非常经典的问题.今年微软实习生的笔试有一个这个的扩展版,牵扯到模板之类的,当时一行代码也没写出来. . dp能够非常优雅的解决问题.状态转移方程也非常明白.用pos[i][j]表示word1的前i个字符与word2的前j个字符之间的编辑距离.假设word[i-1]与word[j-1]相等,那pos[i][j]与pos[i-1][j-1]相等,否则的话.依据编辑的几种操作.能够从三种情况中选代替价最小的一种.从word1中删除一个字符?从word2中删除一个字符?改动当中一个?边界也…