leetcode第一刷_Reverse Linked List II】的更多相关文章

翻转链表绝对是终点项目,应该掌握的,这道题要求的是翻转一个区间内的节点.做法事实上非常相似,仅仅只是要注意判定開始是头的特殊情况,这样head要更新的,还有就是要把翻转之后的尾部下一个节点保存好,要么链表就断掉了.一趟就能够.遇到节点直接翻转,最后把整个翻转的链表再翻转一次,就实现了. class Solution { public: ListNode *reverseBetween(ListNode *head, int m, int n) { if(head == NULL || m==n)…
Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1->2->3->4->5->NULL, m = 2 and n = 4, return 1->4->3->2->5->NULL. Note:Given m, n satisfy the following cond…
1. Reverse Linked List II Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1->2->3->4->5->NULL, m = 2 and n = 4, return 1->4->3->2->5->NULL. Note:Given m, n satisfy the following c…
当有反复元素的时候呢? 不用拍脑袋都会想到一种方法,也是全部有反复元素时的通用处理方法,维护一个set,假设这个元素没增加过就增加,增加过了的忽略掉.可是,在这道题上这个通用方法竟然超时了! 怎么办?想一下为什么会这样,如果我们要排列的数字是1111112,当当前的排列中没有1时,取哪个1生成一遍,都是一样的.仅仅有当前面的1都用过了,必须轮到这个1出场的时候,它才会有价值.更明白一点说,如果我们要在生成的排列中放两个1,那么这两个1是原来的哪两个根本无所谓,不断的选,终于的结果肯定一样,可是当…
很自然的推广,假设去掉全然二叉树的条件呢?由于这个条件不是关键,因此不会影响整体的思路.做法依旧是每次找到一层的起点,然后一层一层的走. 假设是全然二叉树的话,每层的起点就是上一层起点的左孩子,兄弟之间的链接也简单,直接找相应父亲的左右孩子就可以. 一般二叉树时,起点应该是上一层第一个有孩子节点的左孩子,或者没有左孩子时.是他的右孩子. 为了能在孩子层中不断链接,我们必须保存当孩子层的前一个节点,当当前层找到一个节点有孩子,就接到这个pre节点后面,然后更新pre节点的指向. class Sol…
啊啊啊啊.好怀念这样的用递归保存路径然后打印出来的题目啊.好久没遇到了. 分了两种,一种是能够反复使用数组中数字的,一种是每一个数字仅仅能用一次的.事实上没有多大差别,第一种每次进入递归的时候都要从头開始尝试.另外一种要找一个标记的数组,把已经用到过的排除掉,就像生成全排列时的做法一样. 跟我一样用引用保存中间结果的话.要注意回退的情况. 另外一种回退时,要把用到的那个数也恢复为可用,就全然像全排列时做的一样.破例贴两个题的代码.由于他们是在是不值得用两片文章来写. class Solution…
这道题非常难. 之前的题目我提到过一次用两个vector来做层序遍历的,就是由于这道题.要想最后恢复出单词变换的路径,就须要事先保存,依据dp中路径恢复的启示,保存的应该是一个单词的前一个变换节点.可能有非常多个单词都能变换到当前单词,因此应该是一个set.用一个二维的vector保存当前能够变换到的单词和变换出这些单词单词.每一维的vector存放的都是一个set.设存放当前可訪问单词的vector下标是current,存放变幻出这些单词的vector下标是pre,那么每一轮要開始更新curr…
在更新上面一道题的时候我就想,是不是另一道打印路径的,果不其然啊. 这样的题非经常见的,做法也非常easy,我是用一个引用的vector来存,满足条件之后直接压入结果集中,当然也能够用数组之类的,都一样.用引用须要注意的问题就是递归进行到后面的时候会对栈中的上层状态产生影响,当然能够用传值的方法来避免这个问题,可是那样子开销太大了(每次船建和销毁一个类对象,不是明智的选择).那么就是要回退,那什么时候回退,回退多少次呢?我觉得能够这样确定,在一层递归中,压入和弹出要成对出现,在这种方法中压入了几…
跟上一题的策略全然一样,这个题是要求保存当前增加的是第几个数,由于矩阵里面存的就是这个东西. 我有尝试想过是不是有一种方法能够直接推算出每一行的数据是哪些.但没过多久就放弃了.这样的方法尽管能够避免在一个二维数组中的随机訪问,可是策略太复杂了,得不偿失. class Solution { public: vector<vector<int> > generateMatrix(int n) { vector<int> tpres(n, 0); vector<vect…
这个题好无趣,竟然输出解的个数.前一个题把全部解都输出出来了.还愁不知道解的个数吗. . 我怀疑这个解的个数是有一个类似通项的东西,就上网查了一下.没有啊亲,最后就把上一题的代码略微改了一下过掉了. class Solution { public: int totalNQueens(int n) { if(n == 0) return 0; int pos[n], res=0, start=0; bool flag, vis[n]; memset(pos, 0, sizeof(pos)); me…