2012年5月30日

字符串的排列组合问题

摘要: 来源http://blog.csdn.net/wuzhekai1985问题1 :输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则输出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。 思路:这是个递归求解的问题。递归算法有四个特性:(1)必须有可达到的终止条件,否则程序将陷入死循环;(2)子问题在规模上比原问题小;(3)子问题可通过再次递归调用求解;(4)子问题的解应能组合成整个问题的解。 对于字符串的排列问题。如果能生成n - 1个元素的全排列,就能生成n个元素的全排列。对于只有1个元素的集合,可以直接生成全排列。全排列的递归终止 阅读全文

posted @ 2012-05-30 17:00 为梦飞翔 阅读(10473) 评论(4) 推荐(2)

求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}

摘要: 目前想到的一个方法,就是用栈来寻找,说下思想:(栈中的data为元素所在的位置,这意味着出栈和进栈的都是索引值,所以比较的时候根据索引找到其值后比较)(1)栈为空,把一个元素入栈。9(2)把小于栈顶的元素依次入栈。9 4 3 2,入栈完成后记录一下该组合(3)若栈为空,结束,非空,则出栈,寻找小于栈顶值大于出栈值的元素,出栈后当栈为空时,找到一个比弹出元素大的即可。(开始查找的位置出栈值所在位置的后一个)(4)若找到,则把该元素入栈,跳到步骤(2)(5)若找不到,则继续步骤(3)(6)其中组合最大的即为所求模拟一下该过程9(1)9 4 3 2(2)9 4 3(3)(5)9 4(3)(5)9 5 阅读全文

posted @ 2012-05-30 11:14 为梦飞翔 阅读(2180) 评论(2) 推荐(0)

四对括号可以有多少种匹配排列方式?比如两对括号可以有两种:()()和(())

摘要: 该题的公式版暂时还没弄出来,感觉是应该可以按照排列组合弄出来的。下面给出程序版的第一种思想:把所有8位以内的二进制数循环一次,对于每一个二进制数的每一位,从高到低依次相加,其中遇到0的话加-1,遇到1加1,每次加的结果需要大于等于0加完所有位的结果应该为0,满足两个条件的即是一种组合第二种思想:我们可以用生成二叉树的方法解决,重新定义一个数据结构,数据结构如下:struct Node{ int data;//0或1 int num0;//0出现的次数 int num1;//1出现的次数 struct Node* lchild; struct Node* rchil... 阅读全文

posted @ 2012-05-30 10:06 为梦飞翔 阅读(2812) 评论(2) 推荐(0)

导航