摘要:
<?php #输入一个栈的压栈序列和一个弹栈序列,判断该弹栈序列是否可能是压栈序列的输出 #例如压栈序列 12345,则弹栈序列可以是 54321 或者 45321 #解题思路,建一个空栈,按照压栈序列入栈,当压入的栈顶元素与弹栈序列的指针指向元素相同时,将元素弹出 #直到将压栈序列的元素全部压完,如果弹栈序列是正确的,则最后栈内元素可以按照弹栈序列顺序弹出,最后栈为空 #否则栈不为空 function test($push, $pop) { $len = count($push); $stack = array(); ... 阅读全文
摘要:
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 ... 阅读全文
摘要:
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... 阅读全文
摘要:
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... 阅读全文