摘要:
斐波那契数列; 1 class Solution { 2 public: 3 int climbStairs(int n) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 if (n fb(n + 1, 1);10 fb[2] = 2;11 for (int i = 3; i <= n; ++i) {12 fb[i] = fb[i - 1] + fb[i - ... 阅读全文
摘要:
很简单的dfs; 1 class Solution { 2 public: 3 bool exist(vector > &board, string word) { 4 // Start typing your C/C++ solution below 5 // DO NOT write int main() function 6 if (word.empty()) { 7 return true; 8 } 9 if (board.empty()) {10 r... 阅读全文
摘要:
中等难度的题目,可是还是想不出来,哎,这种题目应该属于必须做对的题目,没有什么特别的考虑,只是给你设置了一个障碍,需要你想办法翻越这个障碍,看了提示用两个指针,还是没做出来;主要这种做法完全没有一点印象和灵感,还是锻炼和接触的太少了;解法很简洁,只需要递进地移动开始指针就可以了,其实关键在于设计移动的策略和条件;我发现其实一般简洁的解法当中都加入了一些对人来说显而易见的重复,我之前的想法一直是在考虑移动起始点,然后再去判断是否可以满足包含的条件,这样就会很难处理,需要记录的各种条件就会比较多;最后才发现其实保存前面已经满足条件的状态不变就行了,遇到新的元素之后,只需要判断它是否可以取代前面的元 阅读全文
摘要:
看起来很简单,实际上超级难的题目呀,开始怎么想都只能想到O(n^2)的方法,后来看了一下提示这道题是用栈,思考了一下写了一个,基本思路算是理解了,不过关键在于遇到一个小于栈顶的数时,在不断弹出栈中比该元素大的数的时候要记住弹出元素的个数,所以我写的是用两个值来表示栈中的一个元素,一个是高度,另一个是个数,可是这样还有一个问题:每次更新的时候只更新了左边比它大的元素的个数,当后面再有元素弹出时,这时它右边的这些弹出了的元素的长度就没有被计算,所以关键问题在于怎么记录一个元素左右比它大的元素的数目,即它的最大长度,哎,始终想不到比较高效的方式,如果直接给每个元素一个值来记录的话,这样每次都需要遍历 阅读全文