目录

题解

[0001] 两数之和

题目描述

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

Related Topics

  • 数组

  • 哈希表

  • 题目代码

    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
    
        }
    };
    

    题目解析

    方法一
    分析
    • 这道题是一个查找问题。可以通过哈希表加速。
    • 可以通过遍历数组中的每个元素nums[i],查找target-nums[i]
    • 查找target-nums[i],可以遍历整个数组nums,总的时间复杂度为$O(n^2)$;也可以使用哈希表记录已查元素及其索引,中的时间复杂度为$O(n)$
    思路
    • 创建哈希表:<nums[i], index>。用于存储元素及其索引。
    • 遍历数组的每个元素nums[i]。检查哈希表中是否存在target-nums[i],如果存在,返回两个元素的索引;否则,将当前元素存储到哈希表中,处理下一个元素。
    • 如果遍历完所有元素,查找失败,返回空数组。
    注意
    • 边界检查:数组为空;
    • 处理查找失败情况;
    知识点
    • 数组
    • 查找
    • 哈希表
    复杂度
    • 时间复杂度:O(n)
    • 空间复杂度:O(n)
    答案
    //#include <unordered_map>
    //
    //using namespace std;
    
    class Solution {
    public:
        vector<int> twoSum(vector<int>& nums, int target) {
            // 输入检查
            if(nums.empty())
                return {};
            // 创建哈希表 <num, index>,加速查找
            unordered_map<int, int> m;
            for(int i=0; i<nums.size(); i++){
                if(m.count(target - nums[i]))
                    return {i, m[target-nums[i]]};
                m[nums[i]] = i; // <num, index>
            }
            return {};
        }
    };
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0002] 两数相加

    题目描述

    给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

    如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

    您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

    示例:

    输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
    输出:7 -> 0 -> 8
    原因:342 + 465 = 807
    

    Related Topics

  • 链表

  • 数学

  • 题目代码

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0003] 无重复字符的最长子串

    题目描述

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

    示例 1:

    输入: "abcabcbb"
    输出: 3
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
    

    示例 2:

    输入: "bbbbb"
    输出: 1
    解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
    

    示例 3:

    输入: "pwwkew"
    输出: 3
    解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
         请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
    

    Related Topics

  • 哈希表

  • 双指针

  • 字符串

  • Sliding Window

  • 题目代码

    class Solution {
    public:
        int lengthOfLongestSubstring(string s) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0004] 寻找两个有序数组的中位数

    题目描述

    给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。

    请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

    你可以假设 nums1 和 nums2 不会同时为空。

    示例 1:

    nums1 = [1, 3]
    nums2 = [2]
    
    则中位数是 2.0
    

    示例 2:

    nums1 = [1, 2]
    nums2 = [3, 4]
    
    则中位数是 (2 + 3)/2 = 2.5
    

    Related Topics

  • 数组

  • 二分查找

  • 分治算法

  • 题目代码

    class Solution {
    public:
        double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0005] 最长回文子串

    题目描述

    给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

    示例 1:

    输入: "babad"
    输出: "bab"
    注意: "aba" 也是一个有效答案。
    

    示例 2:

    输入: "cbbd"
    输出: "bb"
    

    Related Topics

  • 字符串

  • 动态规划

  • 题目代码

    class Solution {
    public:
        string longestPalindrome(string s) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0006] Z 字形变换

    题目描述

    将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。

    比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:

    L   C   I   R
    E T O E S I I G
    E   D   H   N
    

    之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:”LCIRETOESIIGEDHN”。

    请你实现这个将字符串进行指定行数变换的函数:

    string convert(string s, int numRows);

    示例 1:

    输入: s = "LEETCODEISHIRING", numRows = 3
    输出: "LCIRETOESIIGEDHN"
    

    示例 2:

    输入: s = "LEETCODEISHIRING", numRows = 4
    输出: "LDREOEIIECIHNTSG"
    解释:
    
    L     D     R
    E   O E   I I
    E C   I H   N
    T     S     G

    Related Topics

  • 字符串

  • 题目代码

    class Solution {
    public:
        string convert(string s, int numRows) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0007] 整数反转

    题目描述

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

    示例 1:

    输入: 123
    输出: 321
    

     示例 2:

    输入: -123
    输出: -321
    

    示例 3:

    输入: 120
    输出: 21
    

    注意:

    假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

    Related Topics

  • 数学

  • 题目代码

    class Solution {
    public:
        int reverse(int x) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0008] 字符串转换整数 (atoi)

    • atoi

    题目描述

    请你来实现一个 atoi 函数,使其能将字符串转换成整数。

    首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。

    当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。

    该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可以被忽略,它们对于函数不应该造成影响。

    注意:假如该字符串中的第一个非空格字符不是一个有效整数字符、字符串为空或字符串仅包含空白字符时,则你的函数不需要进行转换。

    在任何情况下,若函数不能进行有效的转换时,请返回 0。

    说明:

    假设我们的环境只能存储 32 位大小的有符号整数,那么其数值范围为 [−231, 231 − 1]。如果数值超过这个范围,请返回  INT_MAX (231 − 1) 或 INT_MIN (−231) 。

    示例 1:

    输入: "42"
    输出: 42
    

    示例 2:

    输入: "   -42"
    输出: -42
    解释: 第一个非空白字符为 '-', 它是一个负号。
         我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
    

    示例 3:

    输入: "4193 with words"
    输出: 4193
    解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
    

    示例 4:

    输入: "words and 987"
    输出: 0
    解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
         因此无法执行有效的转换。

    示例 5:

    输入: "-91283472332"
    输出: -2147483648
    解释: 数字 "-91283472332" 超过 32 位有符号整数范围。
         因此返回 INT_MIN (−231) 。
    

    Related Topics

  • 数学

  • 字符串

  • 题目代码

    class Solution {
    public:
        int myAtoi(string str) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0009] 回文数

    题目描述

    判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

    示例 1:

    输入: 121
    输出: true
    

    示例 2:

    输入: -121
    输出: false
    解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
    

    示例 3:

    输入: 10
    输出: false
    解释: 从右向左读, 为 01 。因此它不是一个回文数。
    

    进阶:

    你能不将整数转为字符串来解决这个问题吗?

    Related Topics

  • 数学

  • 题目代码

    class Solution {
    public:
        bool isPalindrome(int x) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0010] 正则表达式匹配

    题目描述

    给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ’*’ 的正则表达式匹配。

    '.' 匹配任意单个字符
    '*' 匹配零个或多个前面的那一个元素
    

    所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。

    说明:

      <li><code>s</code>&nbsp;可能为空,且只包含从&nbsp;<code>a-z</code>&nbsp;的小写字母。</li>
      <li><code>p</code>&nbsp;可能为空,且只包含从&nbsp;<code>a-z</code>&nbsp;的小写字母,以及字符&nbsp;<code>.</code>&nbsp;和&nbsp;<code>*</code>。</li>
      

    示例 1:

    输入:
    s = "aa"
    p = "a"
    输出: false
    解释: "a" 无法匹配 "aa" 整个字符串。
    

    示例 2:

    输入:
    s = "aa"
    p = "a*"
    输出: true
    解释: 因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此,字符串 "aa" 可被视为 'a' 重复了一次。
    

    示例 3:

    输入:
    s = "ab"
    p = ".*"
    输出: true
    解释: ".*" 表示可匹配零个或多个('*')任意字符('.')。
    

    示例 4:

    输入:
    s = "aab"
    p = "c*a*b"
    输出: true
    解释: 因为 '*' 表示零个或多个,这里 'c' 为 0 个, 'a' 被重复一次。因此可以匹配字符串 "aab"。
    

    示例 5:

    输入:
    s = "mississippi"
    p = "mis*is*p*."
    输出: false

    Related Topics

  • 字符串

  • 动态规划

  • 回溯算法

  • 题目代码

    class Solution {
    public:
        bool isMatch(string s, string p) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0011] 盛最多水的容器

    题目描述

    给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

    说明:你不能倾斜容器,且 n 的值至少为 2。

    图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

    示例:

    输入: [1,8,6,2,5,4,8,3,7]
    输出: 49

    Related Topics

  • 数组

  • 双指针

  • 题目代码

    class Solution {
    public:
        int maxArea(vector<int>& height) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0012] 整数转罗马数字

    题目描述

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

    字符          数值
    I             1
    V             5
    X             10
    L             50
    C             100
    D             500
    M             1000

    例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

    通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

      <li><code>I</code>&nbsp;可以放在&nbsp;<code>V</code>&nbsp;(5) 和&nbsp;<code>X</code>&nbsp;(10) 的左边,来表示 4 和 9。</li>
      <li><code>X</code>&nbsp;可以放在&nbsp;<code>L</code>&nbsp;(50) 和&nbsp;<code>C</code>&nbsp;(100) 的左边,来表示 40 和&nbsp;90。&nbsp;</li>
      <li><code>C</code>&nbsp;可以放在&nbsp;<code>D</code>&nbsp;(500) 和&nbsp;<code>M</code>&nbsp;(1000) 的左边,来表示&nbsp;400 和&nbsp;900。</li>
      

    给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内。

    示例 1:

    输入: 3
    输出: "III"

    示例 2:

    输入: 4
    输出: "IV"

    示例 3:

    输入: 9
    输出: "IX"

    示例 4:

    输入: 58
    输出: "LVIII"
    解释: L = 50, V = 5, III = 3.
    

    示例 5:

    输入: 1994
    输出: "MCMXCIV"
    解释: M = 1000, CM = 900, XC = 90, IV = 4.

    Related Topics

  • 数学

  • 字符串

  • 题目代码

    class Solution {
    public:
        string intToRoman(int num) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0013] 罗马数字转整数

    题目描述

    罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

    字符          数值
    I             1
    V             5
    X             10
    L             50
    C             100
    D             500
    M             1000

    例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

    通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

      <li><code>I</code>&nbsp;可以放在&nbsp;<code>V</code>&nbsp;(5) 和&nbsp;<code>X</code>&nbsp;(10) 的左边,来表示 4 和 9。</li>
      <li><code>X</code>&nbsp;可以放在&nbsp;<code>L</code>&nbsp;(50) 和&nbsp;<code>C</code>&nbsp;(100) 的左边,来表示 40 和&nbsp;90。&nbsp;</li>
      <li><code>C</code>&nbsp;可以放在&nbsp;<code>D</code>&nbsp;(500) 和&nbsp;<code>M</code>&nbsp;(1000) 的左边,来表示&nbsp;400 和&nbsp;900。</li>
      

    给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。

    示例 1:

    输入: "III"
    输出: 3

    示例 2:

    输入: "IV"
    输出: 4

    示例 3:

    输入: "IX"
    输出: 9

    示例 4:

    输入: "LVIII"
    输出: 58
    解释: L = 50, V= 5, III = 3.
    

    示例 5:

    输入: "MCMXCIV"
    输出: 1994
    解释: M = 1000, CM = 900, XC = 90, IV = 4.

    Related Topics

  • 数学

  • 字符串

  • 题目代码

    class Solution {
    public:
        int romanToInt(string s) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0014] 最长公共前缀

    题目描述

    编写一个函数来查找字符串数组中的最长公共前缀。

    如果不存在公共前缀,返回空字符串 ”“。

    示例 1:

    输入: ["flower","flow","flight"]
    输出: "fl"
    

    示例 2:

    输入: ["dog","racecar","car"]
    输出: ""
    解释: 输入不存在公共前缀。
    

    说明:

    所有输入只包含小写字母 a-z 。

    Related Topics

  • 字符串

  • 题目代码

    class Solution {
    public:
        string longestCommonPrefix(vector<string>& strs) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0015] 三数之和

    题目描述

    给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。

    注意:答案中不可以包含重复的三元组。

    示例:

    给定数组 nums = [-1, 0, 1, 2, -1, -4],
    
    满足要求的三元组集合为:
    [
      [-1, 0, 1],
      [-1, -1, 2]
    ]
    

    Related Topics

  • 数组

  • 双指针

  • 题目代码

    class Solution {
    public:
        vector<vector<int>> threeSum(vector<int>& nums) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0016] 最接近的三数之和

    题目描述

    给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。

    例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
    
    与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
    

    Related Topics

  • 数组

  • 双指针

  • 题目代码

    class Solution {
    public:
        int threeSumClosest(vector<int>& nums, int target) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0017] 电话号码的字母组合

    题目描述

    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

    给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

    示例:

    输入:"23"
    输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
    

    说明: 尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

    Related Topics

  • 字符串

  • 回溯算法

  • 题目代码

    class Solution {
    public:
        vector<string> letterCombinations(string digits) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0018] 四数之和

    题目描述

    给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

    注意:

    答案中不可以包含重复的四元组。

    示例:

    给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。
    
    满足要求的四元组集合为:
    [
      [-1,  0, 0, 1],
      [-2, -1, 1, 2],
      [-2,  0, 0, 2]
    ]
    

    Related Topics

  • 数组

  • 哈希表

  • 双指针

  • 题目代码

    class Solution {
    public:
        vector<vector<int>> fourSum(vector<int>& nums, int target) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0019] 删除链表的倒数第N个节点

    题目描述

    给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

    示例:

    给定一个链表: 1->2->3->4->5, 和 n = 2.
    
    当删除了倒数第二个节点后,链表变为 1->2->3->5.
    

    说明:

    给定的 n 保证是有效的。

    进阶:

    你能尝试使用一趟扫描实现吗?

    Related Topics

  • 链表

  • 双指针

  • 题目代码

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* removeNthFromEnd(ListNode* head, int n) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    [0020] 有效的括号

    题目描述

    给定一个只包括 ‘(‘,’)’,’{‘,’}’,’[‘,’]’ 的字符串,判断字符串是否有效。

    有效字符串需满足:

      <li>左括号必须用相同类型的右括号闭合。</li>
      <li>左括号必须以正确的顺序闭合。</li>
      

    注意空字符串可被认为是有效字符串。

    示例 1:

    输入: "()"
    输出: true
    

    示例 2:

    输入: "()[]{}"
    输出: true
    

    示例 3:

    输入: "(]"
    输出: false
    

    示例 4:

    输入: "([)]"
    输出: false
    

    示例 5:

    输入: "{[]}"
    输出: true

    Related Topics

  • 字符串

  • 题目代码

    class Solution {
    public:
        bool isValid(string s) {
    
        }
    };
    

    题目解析

    方法一
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    
    方法二
    分析
    思路
    注意
    知识点
    复杂度
    参考
    答案
    //
    

    专题

    专题-BFS算法


    引言


    例子

    专题-DFS算法


    引言


    例子

    专题-DP算法


    引言


    例子

    专题-STL算法


    引言


    例子

    专题-二分算法


    引言


    例子

    专题-二叉树


    引言


    例子

    专题-回溯算法


    引言


    例子

    专题-图论


    引言


    例子

    专题-堆


    引言


    例子

    专题-字符串


    引言


    例子

    专题-排序算法


    引言


    例子

    专题-搜索算法


    引言


    例子

    专题-数学


    引言


    例子

    专题-数组


    引言


    例子

    专题-数论


    引言


    例子

    专题-枚举算法


    引言


    例子

    专题-查找算法


    引言


    例子

    专题-栈


    引言


    例子

    专题-模拟算法


    引言


    例子

    专题-贪心算法


    引言


    例子

    专题-递归算法


    引言


    例子

    专题-链表


    引言


    例子

    专题-队列


    引言


    例子

    专题-随机化


    引言


    例子