LeetCode 120. 三角形最小路径和
给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。
例如,给定三角形:
[
[**2**],
[**3**,4],
[6,**5**,7],
[4,**1**,8,3]
]
自顶向下的最小路径和为 11
(即,**2 **+ 3 + **5 **+ 1 = 11)。
说明:
如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。
我的答案:
class Solution {
public:
int minimumTotal(vector>& triangle) {
int ans;
vector path,temp;
path.push_back(triangle[0][0]);
for(int i=1; i
LeetCode 96. 不同的二叉搜索树
给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?
示例:
输入: 3
输出: 5
解释: 给定 n = 3, 一共有 5 种不同结构的二叉搜索树:
1 3 3 2 1
\ / / / \ \
3 2 1 1 3 2
/ / \ \
2 1 2 3
我的答案:
class Solution {
public:
//46min, with help
int numTrees(int n) {
int sum = 0;
vector res;
res.push_back(1);
for(int i=1; i<=n; i++){
sum = 0;
for(int j=0; j
LeetCode 62. 不同路径
一个机器人位于一个 *m x n *网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?
例如,上图是一个7 x 3 的网格。有多少可能的路径?
说明:m和n的值均不超过 100。
示例 1:
输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
- 向右 -> 向右 -> 向下
- 向右 -> 向下 -> 向右
- 向下 -> 向右 -> 向右
示例 2:
输入: m = 7, n = 3
输出: 28
我的答案:
class Solution {
public:
//10min
int uniquePaths(int m, int n) {
int map[m][n];
for(int i=0; i
LeetCode 647. 回文子串
给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。
示例 1:
输入: "abc"
输出: 3
解释: 三个回文子串: "a", "b", "c".
示例 2:
输入: "aaa"
输出: 6
说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".
注意:
- 输入的字符串长度不会超过1000。
我的答案:
class Solution {
public:
int countSubstrings(string s) {
string str = "#";
int ans = 0;
for(int i=0; ilen && i+len