100天代码挑战:DAY11

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”)。
问总共有多少条不同的路径?

image

例如,上图是一个7 x 3 的网格。有多少可能的路径?

说明:m和n的值均不超过 100。

示例 1:
输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。

  1. 向右 -> 向右 -> 向下
  2. 向右 -> 向下 -> 向右
  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".

注意:

  1. 输入的字符串长度不会超过1000。

我的答案:

class Solution {
public:
    int countSubstrings(string s) {
        string str = "#";
        int ans = 0;
        for(int i=0; ilen && i+len

你可能感兴趣的:(100天代码挑战:DAY11)