剑指offer12-13


题目描述

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。

[[“a”,”b”,”c”,”e”],
[“s”,”f”,”c”,”s”],
[“a”,”d”,”e”,”e”]]

但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入这个格子。

输入:
"ABCESFCSADEE",3,4,"ABCCED"
输出:
true

###题解:

class Solution:
    def hasPath(self, matrix, rows, cols, path):
        if not matrix:
            return False
        if not path:
            return True
        x = [list(matrix[cols*i:cols*i+cols]) for i in range(rows)]       #构建二维数组
        for i in range(rows):
            for j in range(cols):
                if self.find(x,i,j,path):
                    return True
        return False
    def find(self,matrix,i,j,p):
        if matrix[i][j] == p[0]:    #如果找到路径开头字母
            if not p[1:]:           #并且后面不为空,开始递归
                return True      
            matrix[i][j] = ''       #将路径已经遍历过的路径设为空,避免'SAS'这种情况
            if i>0 and self.find(matrix,i-1,j,p[1:]):     #左
                return True
            if i<len(matrix)-1 and self.find(matrix,i+1,j,p[1:]):  #右
                return True
            if j>0 and self.find(matrix,i,j-1,p[1:]):          # 上    
                return True
            if j<len(matrix[0])-1 and self.find(matrix,i,j+1,p[1:]):  #下
                return True
#             return True
            matrix[i][j] = p[0]     #如果四个方位都没找到路径,将矩阵元素设为初始值
#             return False
        else:
            return False

题目描述

地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?

输入:
5,10,10
输出:
21

题解

class Solution:
    def cal(self,temp):
        sum = 0
        while temp != 0:
            sum +=temp%10
            temp = temp/10
        return sum
    def movingCount(self, threshold, rows, cols):
        num = 0
        for i in range(rows):
            for j in range(cols):
                if (self.cal(i)+self.cal(j)<=threshold):
                    num += 1
                elif (rows ==1 or cols ==1):
                    return num
        return num

评论
 Previous
leetcode股票问题DP解法 leetcode股票问题DP解法
问题力扣的股票问题一共有6道: 121. 买卖股票的最佳时机 122. 买卖股票的最佳时机 II 123. 买卖股票的最佳时机 III 188. 买卖股票的最佳时机 IV 309. 最佳买卖股票时机含冷冻期 714. 买卖股票的最佳时机含
2021-02-01
Next 
life's an open door life's an open door
Open DoorI’ve seen mountainsI’ve seen breachesDistant seasUncharted beachesI’ve seen lightFrom many welcome portsI’ve be
2020-10-23
  TOC