ldjhust

工欲善其事 必先利其器

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
上一页 1 ··· 5 6 7 8 9 10 11 12 13 下一页

2013年5月4日

摘要: 题目:给定两个字符串,求这两个字符串的最长公共子序列。例如:cnblog 和 belogn 的最长公共子序列是blog。 0 , i == 0 || j == 0思路:利用动态规划的思想 C[i][j] = max{C[i-1][j], C[i][j-1]}, x[i] != y[j] C[i-1][j-1] + 1 , x[i] == y[j]代码如下: 1 void LongestCommenSubSequence(char Str1[], int M, ... 阅读全文
posted @ 2013-05-04 17:07 ldjhust 阅读(187) 评论(0) 推荐(1) 编辑

2013年5月3日

摘要: 题目:输入一个字符串,输出其所有的排列组合。思路:分别将每一个字符固定在首位置,然后求后面字符的排列组合,递归的思想。代码如下:1 void Permutation(char *Str)2 {3 assert (Str != NULL);4 5 Permutation (Str, Str);6 } 1 void Permutation(char *Str, char *pTemp) 2 { 3 assert (Str != NULL); 4 5 assert (pTemp != NULL); 6 7 if (*pTemp == '\0') 8 ... 阅读全文
posted @ 2013-05-03 14:03 ldjhust 阅读(173) 评论(0) 推荐(0) 编辑

摘要: 题目:合并两个单向有序链便,保证合并之后的链表依然是有序的。例如:1->3->5和2->4->8合并完之后:1->2->3->4->5->8思路:运用递归,很简洁。代码如下: 1 ListNode *CombineList(ListNode *List1, ListNode *List2) 2 { 3 if (NULL == List1) 4 { 5 return (List2); 6 } 7 8 if (NULL == List2) 9 {10 return (List1);11 }12 13 List... 阅读全文
posted @ 2013-05-03 13:25 ldjhust 阅读(308) 评论(1) 推荐(1) 编辑

摘要: 在字符串中找出连续最长的数字串,例如:abcd12345ed125ss123456789, 输出123456789。思路:利用一个数组记录各个数字字串的长度。代码如下: 1 void LongestSubNumberString(const char *Str) 2 { 3 assert (Str != NULL); 4 5 int nLength = strlen (Str); 6 7 if (0 == nLength) 8 { 9 printf ("空字符串!\n");10 return;11 }12 13 ... 阅读全文
posted @ 2013-05-03 12:00 ldjhust 阅读(413) 评论(0) 推荐(0) 编辑

摘要: 题目:输入两个整数序列。其中一个序列表示栈的push 顺序,判断另一个序列有没有可能是对应的pop 顺序。为了简单起见,我们假设push 序列的任意两个整数都是不相等的。比如输入的push 序列是1、2、3、4、5,那么4、5、3、2、1 就有可能是一个pop 系列。思路:建立一个栈,若栈不为空,检查栈顶元素是否与pop序列将要弹出的元素相同,若相同则弹出栈顶元素,若不同,则检查push序列,将push序列中将与pop序列将要弹出元素不同的全部压入栈,直到找到相同的,若在push剩下的元素中找不到与pop序列将要弹出的元素相同的元素,则这个pop序列不可能是push序列的一个弹出序列,循环下去 阅读全文
posted @ 2013-05-03 11:22 ldjhust 阅读(246) 评论(0) 推荐(0) 编辑

2013年5月2日

摘要: 题目:输入一个表示整数的字符串,把该字符串转换成整数并输出。例如输入字符串345,则输出整数345。思路:在这里我们只考虑int型所能表示的范围内的整数,即[-2147483648, 2147483647),超过这个范围的我们不做处理,其实思路都一样,只是代码需要稍作修改。这道题考的就是细心,所有的方面都要考虑到(溢出、空字符串、正负号、包含不是数字字符的字符串)。 代码有注释,这里就不做过多解释:PS:代码略微有些长 1 int StringToInt(const char *Str) 2 { 3 assert (Str != NULL); 4 5 if ('\... 阅读全文
posted @ 2013-05-02 16:58 ldjhust 阅读(693) 评论(0) 推荐(0) 编辑

摘要: 题目:求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case 等关键字以及条件判断语句。思路:利用类初始化时会自动调用构造函数可以完成,还有几种方法,以后再说。 1 #include <iostream> 2 #include <cassert> 3 4 using namespace std; 5 6 class SUM 7 { 8 private: 9 static int N;10 static int Sum;11 12 public:13 SUM()14 {1... 阅读全文
posted @ 2013-05-02 14:12 ldjhust 阅读(155) 评论(0) 推荐(0) 编辑

摘要: 以防生疏,所以今天又写了一下二叉树的前中后序递归和非递归的实现:二叉树的节点数据结构:1 struct BinaryTreeNode2 {3 int nData;4 5 BinaryTreeNode *lChild;6 BinaryTreeNode *rChild;7 };最后用来测试的树: 1 / \ 2 4 \ / \ 3 5 6 \ 7前序递归代码: 1 void RecursionBinaryTreePreOr... 阅读全文
posted @ 2013-05-02 11:31 ldjhust 阅读(200) 评论(0) 推荐(0) 编辑

2013年5月1日

摘要: 题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。思路:ASCII码表总共只有255个字符,只需建立一个整型数组分别存储每一个字符出现的次数,再顺序遍历字符串,查找其对应的在字符串中出现的次数,首先只出现一次的字符就是我们需要的字符。基于以上分析,代码如下: 1 char FirstOnceChar(const char *Str) 2 { 3 assert (Str != NULL); 4 5 // ASCII总共只有255个字符 6 int Count[255]; 7 8 memset (Count, 0, 255 * ... 阅读全文
posted @ 2013-05-01 17:09 ldjhust 阅读(188) 评论(0) 推荐(0) 编辑

摘要: 题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。例如输入78/ \6 10/ \ / \5 7 9 11输出8 6 10 5 7 9 11。二叉树节点的数据结构:1 struct BinaryTreeNode2 {3 int nData;4 5 BinaryTreeNode *lChild;6 BinaryTreeNode *rChild;7 };思路:按层次遍历一般用队列很容易实现,直接上代码: 1 void LevelTraversalBinaryTree(BinaryTreeNode *root) 2 { 3 asser... 阅读全文
posted @ 2013-05-01 16:41 ldjhust 阅读(616) 评论(2) 推荐(0) 编辑

上一页 1 ··· 5 6 7 8 9 10 11 12 13 下一页