端午节快乐???即使是端午节,放假和不放假有什么区别……
0063题 不同路径 II【Unique Paths II】
题目:
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?
网格中的障碍物和空位置分别用 1 和 0 来表示。
说明:m 和 n 的值均不超过 100。
示例:
输入:
[
[0,0,0],
[0,1,0],
[0,0,0]
]
输出: 2
解释:
3x3 网格的正中间有一个障碍物。
从左上角到右下角一共有 2 条不同的路径:
1. 向右 -> 向右 -> 向下 -> 向下
2. 向下 -> 向下 -> 向右 -> 向右
题目相对严谨
除Robust以外无需注意太多
解题思路:
这道题其实不像上一道题那样可以直接用数学方法解决,那么还不如老老实实用动态规划处理一下,这里post代码
class Solution:
def uniquePathsWithObstacles(self, obstacleGrid):
n = len(obstacleGrid)
if n == 0: return 0
m = len(obstacleGrid[0])
d = [[0 for col in range(m)] for row in range(n)]
for i in range(n):
if obstacleGrid[i][0] != 1:
d[i][0] = 1
else:
break
for i in range(m):
if obstacleGrid[0][i] != 1:
d[0][i] = 1
else:
break
for i in range(1,n):
for j in range(1,m):
if obstacleGrid[i][j] != 1:
d[i][j] = d[i-1][j] + d[i][j-1]
return d[n-1][m-1]
0064题 最小路径和【Minimum Path Sum】
题目:
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。
说明:每次只能向下或者向右移动一步。
示例:
输入:
[
[1,3,1],
[1,5,1],
[4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。
题目相对严谨
除Robust以外无需注意太多:
额外注意的就是一定要知道谁是行数谁是列数,如何循环,很多人的解法n和m不是按照字典顺序来赋值的,比如说我自己就是……反正这点要多加小心。
解题思路:
第一反应宝藏迷宫……第二反应并不是01背包问题……而又是那个和前面两题一样的简单DP,这里就不post代码了……这几题为什么难度标的中等啊……
其实突然相到这种题可以直接在原数组上修改的,这样额外空间使用就是 了。
0065题 有效数字【Valid Number】
题目:
验证给定的字符串是否为数字。
说明: 我们有意将问题陈述地比较模糊。在实现代码之前,你应当事先思考所有可能的情况。
更新于 2015-02-10:
C++函数的形式已经更新了。如果你仍然看见你的函数接收 const char * 类型的参数,请点击重载按钮重置你的代码。
示例:
例如:
"0" => true
" 0.1 " => true
"abc" => false
"1 a" => false
"2e10" => true
题目非常不严谨
根本不知道该怎么写这个需要注意,只能一点一点来?喵的,降低提交通过率的一道题,反正我的提交通过率也不是很高→_→
这题标准解题方法也是各种情况都要考虑吧,不过你们不可能有我考虑的多啊,比如说像是一串计算式,带有逗号的数字表达法,换进制带有ABCDEF的数字等……这些都没有出现,所以一套try except
带走了喂。
class Solution:
def isNumber(self, s):
try:
float(s)
return True
except:
return False
哼,本来还以为有什么难度……没想到是一个小垃圾。
0066题 加一【Plus One】
题目:
给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组。
最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。
示例:
输入: [1,2,3]
输出: [1,2,4]
解释: 输入数组表示数字 123。
输入: [4,3,2,1]
输出: [4,3,2,2]
解释: 输入数组表示数字 4321。
题目相对严谨
无需注意太多
解题思路:
额,就是高精度加1吧,那就很简单了,post代码
class Solution:
def plusOne(self, digits):
n = len(digits)
digits[-1] += 1
for i in range(n-1,0,-1):
if digits[i] == 10:
digits[i] = 0
digits[i-1] += 1
if digits[0] == 10:
digits[0] = 0
digits.insert(0,1)
return digits
然而,在看到python的最快解法的时候,我傻眼了,原来还可以直接算啊……哭笑不得
class Solution:
def plusOne(self, digits):
sum=0
for i in digits:
sum=10*sum+i
return [int(x) for x in str(sum+1)]
小聪明划出天际了(