这一题和Permutation II很像,一个是排列一个是组合。
我们理清思路,从最基本的获取子集的方法开始分析:
获取子集总的来说可以用循环或者递归做,同时还可以根据数字对应的binary code得到。
例如s = {x,y,z}可以生成的组合有:x,y,z,xy,yz,xz,xyz,0
第一种思路:
1. 维护一个集合Set(i),包含s[0...i]可生成的所有组合
s...
分类:
其他好文 时间:
2014-09-27 00:19:18
阅读次数:
368
第 15 题(树):题目:输入一颗二元查找树,将该树转换为它的镜像,即在转换后的二元查找树中,左子树的结点都大于右子树的结点。用递归和循环两种方法完成树的镜像转换。 例如输入:8/ \6 10/ \ / \5 7 9 11输出:8/ \10 6/ \ / \11 9 7 5定...
分类:
其他好文 时间:
2014-08-04 21:07:08
阅读次数:
264
递归算法大家都不陌生,当需要重复计算相同问题时,一般可以选择递归和循环两种算法。又因为递归实现起来代码比较简洁,所以通常都会使用递归来解决上述问题。比如斐波那契数列,再比如树的前序、中序、后续遍历算法。
递归算法虽然是有代码简洁这个优点,但是其缺点显著。因为递归函数是在执行过程中调用其自身,所以会占用大量的栈上空间,并且压栈和出栈都是有时间消耗的。所以从这一点上来看,递归的效率是不如循环。除...
分类:
其他好文 时间:
2014-07-24 12:24:15
阅读次数:
438
下面是反转一个链表的两种方法:
一、循环算法
// //反转一个链表,循环算法
// LinkList Reverse(LinkList& head)
// {
// // if(!head)
// // return head;
// //此时不用判断head是否为空,如是空的话返回的也是空
// LinkList cur = head;
// LinkList hou;
//...
分类:
其他好文 时间:
2014-05-26 03:20:47
阅读次数:
211