当前位置: 首页 > news >正文

暴风影音2014笔试算法题汇总


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。

思路:先利用前序和中序构建出二叉树,然后后序遍历输出结果

/** 
*返回二叉树的根节点 
*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




相关文章:

  • 华为2014笔试算法题汇总
  • 百度2014笔试算法题汇总
  • 美团网2014笔试算法题汇总
  • 2014百度校招笔试题
  • 从程序员到项目经理:认识项目经理
  • Struts2SpringHibernate整合示例,一个HelloWorld版的在线书店(项目源码+详尽注释+单元测试)...
  • 每天一道算法_2_求高精度幂
  • 【总结】android程序不显示图标,开机自动启动?我来告诉你
  • 完美洗牌算法学习
  • 关于完美洗牌算法中圈和圈起点的一个证明
  • 关于完美洗牌问题的若干思考
  • 木块砌墙
  • Google的一个面试题——数组原地置换
  • linux hostname命令学习
  • 程序锁的核心基本原理
  • [deviceone开发]-do_Webview的基本示例
  • 【RocksDB】TransactionDB源码分析
  • Asm.js的简单介绍
  • es6
  • JavaScript 奇技淫巧
  • magento2项目上线注意事项
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • Sublime text 3 3103 注册码
  • Travix是如何部署应用程序到Kubernetes上的
  • vagrant 添加本地 box 安装 laravel homestead
  • Vue 2.3、2.4 知识点小结
  • 编写符合Python风格的对象
  • 和 || 运算
  • 深度学习入门:10门免费线上课程推荐
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • HanLP分词命名实体提取详解
  • MyCAT水平分库
  • PostgreSQL之连接数修改
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #1015 : KMP算法
  • (3)STL算法之搜索
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (定时器/计数器)中断系统(详解与使用)
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (南京观海微电子)——COF介绍
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)c++ std::pair 与 std::make
  • (转)大型网站的系统架构
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • *上位机的定义
  • .Net6使用WebSocket与前端进行通信
  • .NET开发不可不知、不可不用的辅助类(一)
  • .NET开源全面方便的第三方登录组件集合 - MrHuo.OAuth