美文网首页
这周两道算法题(四十七)

这周两道算法题(四十七)

作者: CrazySteven | 来源:发表于2018-03-25 22:28 被阅读44次

上周他们弄了一道阿里的面试算法题,没有正确答案,而且题目比较复杂,就不写了,这周两道题是同一种类型的题,就一起做了,难度级别都是'Medium',使用语言都是'C'。

题目:在一个m*n的格子里,从左上角走到右下角有多少种走法(只能往右和往下走)

思路:这就标准的动态规划题,关于动态规划,可以看看这篇文章,这个题的算法其实就是将第一行和第一列填1,然后左边格子与上边格子的和就是当前格子的数,填到右下角的数就是结果。具体看代码:

int uniquePaths(int m, int n) {
    //定义一个数组
    int res[n];  
    //左边第一个数为1
    res[0] = 1;  
    for(int i=0;i<m;i++)    
        for(int j=1;j<n;j++)  
            //初始化赋值
            if (i == 0) res[j] = 0;
            //左边res[j-1]和上边的数res[j]求和
            res[j] += res[j-1];
    //返回右下角的结果
    return res[n-1]; 
}

接着直接看第二道:

题目:给你一个m*n的格子,格子中有障碍物,我们记为1,遇到障碍物就无法通行了,然后同样的是让你从左上角走到右下角,求有多少种走法。

思路:这个题思路和上面一样,只是遇到障碍物将结果置为0即可,具体看代码:

int uniquePathsWithObstacles(int** obstacleGrid, int obstacleGridRowSize, int obstacleGridColSize) {
    //如果左上角(起点)或者右下角(重点)有障碍物,直接返回0种走法
    if (obstacleGrid[0][0] || obstacleGrid[obstacleGridRowSize - 1][obstacleGridColSize-1]) return 0;
    //定义容器
    int res[obstacleGridColSize];  
    //左边第一个数为1
    res[0] = 1;  
    
    for(int i = 0;i < obstacleGridRowSize; i++) {    
        for(int j = 0;j < obstacleGridColSize; j++) {
            //初始化赋值
            if (i == 0 && j != 0) res[j] = 0;
            //如果是障碍物,记为0
            if(obstacleGrid[i][j]==1) res[j]=0;   
            //否则如果不是第一列,则加上左边和上边的数
            else if(j) res[j] += res[j-1];  
        }
    }
    return res[obstacleGridColSize-1]; 
}

效率一般,但cpp用这种解法效率就是最好,这种类型的题还有很多种解法,有兴趣的小伙伴可以再尝试用其他的方法解,递归容易超时,就不要用递归了。

版权声明:本文为 Crazy Steven 原创出品,欢迎转载,转载时请注明出处!

相关文章

  • 这周两道算法题(四十七)

    上周他们弄了一道阿里的面试算法题,没有正确答案,而且题目比较复杂,就不写了,这周两道题是同一种类型的题,就一起做了...

  • 【微信事业群】趣味面试算法题

    今天和大家分享博主在腾讯二面期间遇到的两道比较有意思的算法题,由Excel引出的两道面试算法题,可以点开上面的音乐...

  • 每日算法题——打家劫舍

    继续我们的每日算法题系列,有时候你不知道干嘛的时候来上两道算法题,真香~ 话不多说,来看看今天的题目,感觉还是比较...

  • LeetCode 78.子集 和 46.全排列

    1、题目 78题和46题可以一起看,一起做对比。两道题目都是用回溯算法求。但是递归参数有点区别。78题: 46题:...

  • 华为诺亚方舟实验室常见算法题题目

    一、codetest1 4.3约笔试,两道题,一道考察算法[https://www.nowcoder.com/ju...

  • 写给iOS开发的跳一跳秘籍

    开篇前说一下上周和这周都没更新算法题。因为这两周的算法题难度级别都是'Hard',经典题N皇后问题,网上太多太多了...

  • 每日算法(两数之和、两数相加)-11.12

    今天开始记录每天学习一道两道的算法题,由简入难。今天一共学习了两道算法,一道简单一道中等,分别为两数之和、两数相加...

  • ARTS-W02 (12.27 - 1.02)

    Algorithm(一道算法题) 这周刷到的算法题:鸡蛋掉落具体描述如下:你将获得 K 个鸡蛋,并可以使用一栋从 ...

  • iOS 头条面试

    今天参加了头条的高级 iOS 岗位面试,1.5 h,一共两道题。一道问答,另外一道是算法。算法要求必须在纸上写出完...

  • 今日所收

    今日计划: 上午:游戏代码回想,发现卡点 下午:HTML基础学习与总结 晚上:学习简单算法题两道,发布计划与总结 ...

网友评论

      本文标题:这周两道算法题(四十七)

      本文链接:https://www.haomeiwen.com/subject/smnkcftx.html