上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 34 下一页
  2012年10月2日
摘要: 1 <?php 2 #计算某个二进制数共有几个1 3 #例如十进制11 = 二进制1011,则结果是3个1 4 5 #解题思路:利用 n & (n - 1) 可以将最后一个1变0 6 # xxxx1000 & (xxxx1000 - 1) = xxxx1000 & xxxx0111 = xxxx0000 7 # 1011 & (1011 - 1) = 1011 & 1010 = 1010 8 #直到最后一个1被与为0,得出结果 9 10 function count1($n) {11 $r = 0;12 ... 阅读全文
posted @ 2012-10-02 19:13 ZimZz 阅读(1825) 评论(0) 推荐(0) 编辑
摘要: 1 <?php 2 #跳台阶问题 3 #规定跳台阶有两种跳法,一次跳1阶或一次跳2阶,问有n个台阶共有几种跳法 4 #如果n=1,则只有一种跳法,n=2有两种跳法-一次跳1阶,一次跳2阶 5 #如果n > 2时,可以分为两种情况,第一种是第一次跳1阶,那么剩下的跳法就是f(n - 1)种了 6 #第二种是第一次跳2阶,那么剩下的跳法就是f(n - 2)种,则f(n) = f(n - 1) + f(n - 2) 7 #于是有递推公式 8 # | 1 n = 1 9 # f(n) = < 2 n = 2... 阅读全文
posted @ 2012-10-02 19:00 ZimZz 阅读(446) 评论(0) 推荐(0) 编辑
摘要: 1 <?php 2 #输入sum和n,要求输出1,2...n里所有和为sum的组合 3 #这是一个可划分子问题问题 4 #若用f(sum, n)表示问题的界,则元素组合共有两种情况 5 #1. 和为sum的组合里包括n,则f(sum, n) = f(sum - n, n - 1) 6 #2. 和为sum的组合里不包括n,则 f(sum, n) = f(sum, n - 1) 7 #所以 f(sum, n) = f(sum - n, n - 1) U f(sum, n - 1) 8 9 function combination($sum... 阅读全文
posted @ 2012-10-02 13:56 ZimZz 阅读(1196) 评论(0) 推荐(0) 编辑
  2012年10月1日
摘要: 1 <?php 2 #Fibonacci数列问题 3 #f(1) = 1 4 #f(n) = f(n - 1) + f(n - 2) 5 #求f(n) 6 7 #递归方法 8 function fibonacci($n) { 9 if ($n == 0) {10 return 0;11 }12 13 if ($n == 1) {14 return 1;15 }16 17 return fibonacci($n - 1... 阅读全文
posted @ 2012-10-01 23:09 ZimZz 阅读(361) 评论(0) 推荐(0) 编辑
摘要: 1 <?php 2 #生成二叉树镜像(交换树的所有左右节点) 3 4 class Node { 5 public $data = null; 6 public $parent = null; 7 public $left = null; 8 public $right = null; 9 }10 11 #递归方法12 function mirror_recursive($root) {13 if ($root === null) {14 retur... 阅读全文
posted @ 2012-10-01 21:27 ZimZz 阅读(815) 评论(0) 推荐(0) 编辑
摘要: 1 <?php 2 #查找链表倒数第i个节点,倒数第0个为最后一个节点 3 class Node { 4 public $data = null; 5 public $next = null; 6 } 7 8 #第一种方法,先算出链表总长,然后向后寻找n-i个节点 9 function last_i($head, $i) {10 $cnode = $head;11 $n = 0;12 while ($cnode != null) {13 $n++;... 阅读全文
posted @ 2012-10-01 20:33 ZimZz 阅读(352) 评论(0) 推荐(0) 编辑
摘要: 1 <?php 2 class Sum0 { 3 public function sum() { 4 return 0; 5 } 6 } 7 8 class Test { 9 private $a = array();10 11 public function __construct() {12 $this->a[0] = new Sum0();13 $this->a[1] = $this;14 ... 阅读全文
posted @ 2012-10-01 17:36 ZimZz 阅读(923) 评论(0) 推荐(0) 编辑
摘要: 1 <?php 2 #不用加减乘除做加法 3 #思路:使用位运算实现 4 #先算出二者不进位的相加结果,xor实现 5 #再算出二者的进位结果,位与和位移实现 6 #最后把两个结果相加 7 8 function cplus($num1, $num2) { 9 if ($num2 == 0) {10 return $num1;11 }12 13 $sum = $num1 ^ $num2;14 $carry = ($num1 & $num2) << 1;15 ... 阅读全文
posted @ 2012-10-01 17:31 ZimZz 阅读(513) 评论(0) 推荐(0) 编辑
  2012年9月30日
摘要: 1 <?php 2 #查找二叉树距离最长的两个节点的距离,即相距边数最多的两个节点的边数 3 #解题思路:距离最长的两个节点有以下3中情况 4 #1.两个节点一个位于左子树,一个位于右子树,则最长距离是左右子树的深度相加 5 #2.两个节点都位于左子树,则最长距离是以左子树为根节点的左子树的两个左右子树的深度相加 6 #3.两个节点都位于右子树,则最长距离是以右子树为根节点的右子树的两个左右子树的深度相加 7 8 class Node { 9 public $data = null;10 public $lef... 阅读全文
posted @ 2012-09-30 23:35 ZimZz 阅读(613) 评论(0) 推荐(0) 编辑
摘要: 1 <?php 2 #树节点 3 class Node { 4 public $data = null; 5 public $parent = null; 6 public $left = null; 7 public $right = null; 8 } 9 10 #根据先序和中序遍历数组建立二叉树,注意是二叉树,不是二叉排序树,而且条件是树没有相同的值11 12 #思想是使用先序数组确定根节点,然后通过中序数组找到根节点的左右子树节点13 14 #@param pre 前序遍历... 阅读全文
posted @ 2012-09-30 22:10 ZimZz 阅读(1268) 评论(0) 推荐(0) 编辑
上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 34 下一页