摘要:
这个题目就和Palindrome Partitioning很像了,而且比那个的DFS的递归要简单一些,让常人更好理解一些。但是边界条件更多,要考虑清楚。整体思路就是深度优先搜索,首先看到边界条件没,如果没有,就深度搜索:一开始搜索1个字符和剩下的字符串,判断该字符的index是否越界了,对于剩下的字符串递归;然后是2个字符和剩下的字符串,判断这2个字符的首字符是否是0,对于剩下的字符串递归;然后是3个字符和剩下的字符串,判断这3个字符的首字符是否是0,并且这3个字符组成的数字是否小于等于255,对于剩下的字符串递归。ok,思路理清楚了,上代码:import java.util.ArrayLis 阅读全文
摘要:
Java的ArrayList和C++的vector很类似,都是很基本的线性数据结构。但是他们的表现却不同。在工作中碰到一个问题就是,搞不清楚到底传进去的是一个新对象,还是当前对象的引用!经过实战分析:在Java的ArrayList.add(e)中,传入的是引用,因此当你传入e以后,再改变e的成员,则ArrayList里的e也同样会改变,因为本身e和ArrayList中的e就是同一个东西。而C++的vector.push_back(e)则会调用拷贝构造函数,因此当你传入e以后,再改变e的成员,则vector里的e不会变,因为已经是两个对象了。Java代码:import java.util.Arr 阅读全文
摘要:
http://leetcode.com/onlinejudge#question_131这道题看了别人的深度优先搜索,基本上套用过来,过了。深度优先搜索可以是一个递归,不同于普通的递归是:普通的递归一般为:void func() { //terminated condition //do sth.. func();}而深度优先搜索的形式一般为:void func() { //terminated condition 中止条件肯定是有的 //do sth.. for ( ... ) { //当前层所有的可能往下一层走的分支,但是因为for是一次一次执行循环的,所以func会不... 阅读全文