第一题 62. Unique Paths
题目描述
一个机器人位于m x n隔板的左上角(在图中标记为“起点”)。
机器人在任意一点只可以向下或者向右移动一步。机器人尝试到达隔板的右下角(图中标记为“终点”)
有多少种可能的路径?
算法
利用公式
经过推到,我们可以知道,对于 m n 的地图,机器人需要向下走m - 1 次,向右走n - 1次。令 N = m + n - 2的话。我们所有的可能性为C(N, m-1) C(n-1, n-1)。可以直接求解
DP求解
对于地图中的任意一格map[i][j], 都是要么由map[i-1][j]到达要么由map[i][j-1]到达。因此,我们可以从头开始累积,计算出最后的所有可能性
第二题 63. Unique Paths II
题目描述
现在,在机器人前进的道路上可能存在障碍,仍然求有多少条道路可以到达目的地。
算法
动态规划算法,方法与之前一样
第三题 46. Permutations
题目描述
给定一个唯一数字的集合,返回所有可能的排列。
测试用例如题目描述。
算法
利用回溯,模板是相同的,只是结束的条件稍微不同。
第四题 47. Permutations II
题目描述
这次给定的集合中,有重复的数字
算法
增加一个判定矩阵used[]来决定是否加入当前的数字,如果前一个used[i-1]是未使用过的,且当前数字与前一个相同的话,就跳过
第五题 131. Palindrome Partitioning
题目描述
给定一个String,在不改变顺序的情况下,将这个String分成任意份,要求每一份都是由回文字符组成。求所有的可能性
算法
依然使用回溯的方法,对每一段判断是否是一个回文字符,是的话进行操作,不是的话继续循环。
第六题 526. Beautiful Arrangement
题目描述
如果整数1到N的排列,第i个数满足下列规则之一,则称该排列为“美丽排列”
第i个位置的数字可以被i整除
- i可以被第i个位置的数字整除
- 给定数字N,求有多少个美丽排列
注意:N是正整数并且不超过15
算法
回溯
自己的
|
|
改进后
|
|
第七题 401. Binary Watch
题目描述
一个二进制手表顶端有4盏LED灯表示小时(0-11),底部有6盏LED灯表示分钟(0-59)。
每一盏LED灯表示一个0或1,最右端为最低位。
例如上图中的例子读数为”3:25”。
给定一个非负整数n表示当前燃亮的LED灯数,返回所有可能表示的时间。
注意:
输出顺序不重要。
小时不可以包含前缀0,例如”01:00”是无效的,应当为”1:00”。
分钟必须包含两位数字,可以包含前导0,例如”10:2”是无效的,应当为”10:02”。
算法
位运算(Bit Manipulation)
10盏灯泡的燃亮情况可以通过0-1024进行表示,然后计数二进制1的个数即可。
利用位运算将状态拆分为小时和分钟。
|
|