1.自定义实现字符串转为整数的算法,例如把“123456”转成整数123456.(输入中可能存在符号,和数字)
//返回结果的有效标志
enum Status {VALID,IN_VALID};
int gStatus = VALID;
int strToInt(const char* str)
{
long long result = 0;//保存结果
gStatus = IN_VALID; //每次调用时都初始化为IN_VALID
if(str != NULL)
{
const char* digit = str;
bool minus = false;
if(*digit == '+')
digit++;
else if(*digit == '-')
{
digit++;
minus = true;
}
while(*digit != '\0')
{
if(*digit >= '0' && *digit <= '9')
{
result = result * 10 + (*digit -'0');
//溢出
if(result > std::numeric_limits<int>::max())
{
result = 0;
break;
}
digit++;
}
//非法输入
else
{
result = 0;
break;
}
}
if(*digit == '\0')
{
gStatus = VALID;
if(minus)
result = 0 - result;
}
}
return static_cast<int>(result);
}
2.
给出一棵二叉树的前序和中序遍历,输出后续遍历的结果,假设二叉树中存储的均是ASCII码。如前序:ABDHECFG,中序:HDBEAFCG,则输出后序为:HDECFGCA,改正为:HDECFGBA,再次改正HDEBFGCA。
思路:先利用前序和中序构建出二叉树,然后后序遍历输出结果
/**
*返回二叉树的根节点
*preOrder:前序遍历序列
*inOrder:中序遍历序列
*len:节点数目
*/
Node* getBinaryTree(char* preOrder, char* inOrder, int len)
{
if(preOrder == NULL || *preOrder == '\0' || len<=0)
return NULL;
Node* root = (Node*) malloc(sizeof(Node));
if(root == NULL)
exit(EXIT_FAILURE);
//前序遍历的第一个节点就是根节点
root->data = *preOrder;
int pos = 0;//找到根节点在中序遍历中的位置,其值也代表了左子树的节点数目
while(true)
{
if(*(inOrder+pos) == root->data)
break;
pos++;
}
//通过递归找到左子树和右子树,注意子树的前序中序的下标的计算
if(pos == 0)
root->lchild = NULL;
else
root->lchild = getBinaryTree(preOrder+1, inOrder, pos);
if(len-pos-1 == 0)
root->rchild = NULL;
else
root->rchild = getBinaryTree(preOrder+pos+1, inOrder+pos+1,len-pos-1);
return root;
}
/**
*后续遍历二叉树
*
*/
void postOrder(Node* root)
{
if(root == NULL)
return;
postOrder(root->lchild);
postOrder(root->rchild);
printf("%c", root->data);
}
/**
*根据前序遍历和中序遍历输出后续遍历
*
*/
void printPostOrderViaPreOrderAndInorder(char* preOrder, char* inOrder)
{
Node* root = getBinaryTree(preOrder, inOrder, strlen(preOrder));
postOrder(root);
}
3.给出了一个n*n的矩形,编程求从左上角到右下角的路径数(n > =2),限制只能向右或向下移动,不能回退。例如当n=2时,有6条路径。
一是利用数学知识,从左上角到右下角总共要走2n步,其中横向要走n步,所以总共就是C2n~n。
二是利用递归实现
/**
*返回总路径数
*参数m:表示矩形的横向格子数
*参数n:表示矩形的纵向格子数
*/
int getTotalPath(int m, int n)
{
//如果横向格子数为1,则类似“日”字,此时路径数为纵向格子数加1
if(m == 1)
return n + 1;
//如果纵向格子数为1,此时路径数为横向格子数加1
if(n == 1)
return m + 1;
//由于从当前点出发,只能向右或向下移动:
//向右移动,则接下来就是getTotalPath(m-1, n)的情形
//向下移动,则接下来就是getTotalPath(m, n-1)的情形
return getTotalPath(m-1, n) + getTotalPath(m, n-1);
}
转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/12209183
分享到:
相关推荐
暴风影音最好用版本
暴风影音手机版是在线视频播放的利器,支持3d播放,本地视频加密等
暴风有很多朋友留言需要暴风影音5本地播放版,暴风影音作为老牌的本地视频播放软件在解码能力上有很大优势,新发布的暴风影音5号称打开和使用速度平均提升三倍,集成real解码组件,支持绝大多数视频格式。...
暴风影音暴风影音暴风影音
2006年的老版暴风影音,非常好用,绝对好用的影音播放软件,我的珍藏,与你分享。
暴风影音_5.72暴风影音_5.72暴风影音_5.72暴风影音_5.72暴风影音_5.72暴风影音_5.72
暴风影音2015精简版,免安装程序。直接解压即可以使用。
使用过很多种暴风影音软件,感觉还是以前的那一个版本6.4.9.0(暴风影音7.02.01)最好,这一款暴风影音在安装后,桌面上呈现一个带S的黑色图标,后来升级的暴风影音不能播放的影片它都能播放。很棒的。
暴风影音5.exe
暴风影音
暴风影音老版本
皮肤 暴风影音皮肤 暴风影音 皮肤 12种哦
暴风影音数据库文件
暴风影音皮肤★vista完美改进版★ 暴风影音皮肤★vista完美改进版★ 暴风影音皮肤★vista完美改进版★
清爽版暴风影音播放器(支持XP、win2003、win7,亲测过,其它版本没试过)
暴风影音 v5.40.0828.1111 QiuQuan网络增强版.exe
暴风影音rmvb辅助程序
暴风影音播放器。很好用的播放器。
网上已经很难找到了 暴风影音早期版本3.7