翻转链表绝对是终点项目,应该掌握的,这道题要求的是翻转一个区间内的节点,做法其实很相似,只不过要注意判定开始是头的特殊情况,这样head要更新的,还有就是要把翻转之后的尾部下一个节点保存好,要么链表就断掉了。一趟就可以,遇到节点直接翻转,最后把整个翻转的链表再翻转一次,就实现了。
class Solution {
public:
ListNode *reverseBetween(List...
分类:
其他好文 时间:
2014-05-09 15:05:06
阅读次数:
225
递归实现当然太简单,也用不着为了ac走这种捷径吧。。非递归实现还挺有意思的。
树的非递归遍历一定要借助栈,相当于把原来编译器做的事情显式的写出来。对于中序遍历,先要访问最左下的节点,一定是进入循环后,不断的往左下走,走到不能走为止,这时候,可以从栈中弹出访问的节点,相当于“左根右”过程的“根”,然后应该怎么做呢?想一下中序遍历完根节点之后应该干嘛,对,是走到右子树中继续重复这个过程,但是有一点,...
分类:
其他好文 时间:
2014-05-09 14:57:08
阅读次数:
211
字符串的问题真是难,一般递归比较好写代码,一般地归还会超时,而且测试用例特别多。。
这道题刚拿到手时直接慌了,这情况也太多了,后来冷静下来想想,其实还是比较单纯的。一个ip地址,肯定是四个整数加三个点构成,四个整数要满足什么呢,0~255嘛,还有呢,就是这四个整数必须正好把原来的字符串给用完。一开始忽略掉的一类测试用类是前面有0但实际这个数不是零的情况。
用什么来穷举呢,或者说穷举的对象是什么...
分类:
其他好文 时间:
2014-05-09 14:54:11
阅读次数:
210
可能没想到简单方法的人,在上一题中就把这一题给做了。怎样把所有的树都生成出来呢?方法肯定用的是递归,但是有个致命的问题,如果做好了根节点再递归,那么出来的很多树都公用一个根节点,结果肯定是乱七八糟的。
怎么做?其实做法跟之前求个数在思想上是高度统一的,先把所有的左右子树都求出来,然后把它们之间的所有组合都连接到一个新建立出来的根节点,既然是分开左右子树,很容易想到类似二分的思想,每次指定的不是一...
分类:
其他好文 时间:
2014-05-09 14:13:55
阅读次数:
376
Path Sum IGiven a binary tree and a sum,
determine if the tree has a root-to-leaf path such that adding up all the values
along the path equals the gi...
分类:
其他好文 时间:
2014-05-09 13:21:59
阅读次数:
320
一点小错,两次过,基本思想是先比较头元素,哪个小就在哪个list的基础上插入,需要考虑两种不同的结束方式 1
/** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int
val; 5 *...
分类:
其他好文 时间:
2014-05-09 09:21:59
阅读次数:
273
没考虑到的情况有:input: [, expected: false; 语法上也犯了错误:
我定义的stack的泛型为char,泛型不能为primitive datatype,Primitive types such ascharcannot be
used as type parameters i...
分类:
其他好文 时间:
2014-05-09 09:19:01
阅读次数:
252
两次通过,考虑漏了一种情况:input: {1}, 1,
这种情况的output是null,应特殊处理; 同时,另外一个问题是:当要被删除的元素是最后一个元素的时候,我的方法又只能从头找起,不够简洁 1 /** 2 *
Definition for singly-linked list. 3 *.....
分类:
其他好文 时间:
2014-05-09 08:57:45
阅读次数:
278
有关这种字符串的题真是层出不穷啊,而且他们都有这样一个特点,就是递归的思路如此简单,但一定超时!
这个时候,dp就朝我们缓缓走来。递归超,dp搞!这道题的状态转移方程还是比较好写的,用ispart[i][j]代表s1贡献i长,s2贡献j长时,能不能形成s3的前i+j个字符。更新可以按照行或者列开始,s3的前i+j个字符,可以是((i-1)+1)+j构成,也可以是i+((j-1)+1)构成,这取决...
分类:
其他好文 时间:
2014-05-09 06:16:48
阅读次数:
232
原地归并。下面是AC代码: 1 public void merge(int A[], int m,
int B[], int n) { 2 3 int len = A.length; 4 //first copy m elements of A...
分类:
其他好文 时间:
2014-05-09 05:59:54
阅读次数:
297