leetcode刷题总结51-100

51.52 N皇后问题

  描述:

    

 

 

   思路: 回溯

53. 最大子序和

  描述:

    输入: [-2,1,-3,4,-1,2,1,-5,4],
    输出: 6

  思路: 动态规划。状态变量dp[i]表示当前第i个元素的最大子序和。dp[i]=max(dp[i-1],0)+num[i]

54. 螺旋矩阵

  描述:

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

  思路:按照读取的顺序依次遍历。(可以通过一种flag和递归。一趟递归为1-2-3-6-9-8-7-4)

55. 跳跃游戏

  描述:

    输入: [2,3,1,1,4]
    输出: true1

  思路: 动态规划.状态变量dp[i]表示第i个台阶最少需要的次数。当在第一个台阶2的时候,决定了dp[1]=1,dp[2]=1,当到了第二个,dp[2]=min(dp[2]+dp[1]+1)

56. 合并区间

  描述:

    输入: [[1,3],[2,6],[8,10],[15,18]]
    输出: [[1,6],[8,10],[15,18]]

  思路: 按照左边进行排序,然后开始遍历即可。采用一个指针记录当前最大的右边界,用于判断下一个左边界是否小于当前最大的有边界。

57. 插入区间

  描述:

    输入: intervals = [[1,3],[6,9]], newInterval = [2,5]
    输出: [[1,5],[6,9]]

  思路: 同56。

58. 最后一个单词的长度

  描述:

    输入: "Hello World"
    输出: 5

  思路: 两个指针,一个指针从后往前,遇到第一个不为空的,为end,然后start从end开始往前,遇到一个的空停止。

59. 螺旋矩阵

  描述:

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

  思路: 先生成一个n*n的空矩阵,按照思路生成填充即可。

60. 第k个排列

  描述:

    输入: n = 3, k = 3
    输出: "213"

    解释:

      "123"
      "132"
        3. "213"
      "231"
      "312"
      "321"

  思路:回溯j+剪枝。比如第1个字符为”1“的时候,那么剩余2,3字符,排列为A2=2,3-2=1>0,那么就不可能出现在以1开始的字符串,开始2。。。。

61. 旋转链表

  描述;

      输入: 1->2->3->4->5->NULL, k = 2
      输出: 4->5->1->2->3->NULL

  思路: 先遍历一遍,建立一个单项循环链表,然后头指针往后走k个,决定新的头指针和尾指针。。。。

62. 不同路径

  描述:

    

   思路: 动态规划

63.  不同路径 II

   描述: 有障碍物的62题

  思路:动态规划

64. 最小路径和

  描述:有权重的62题

  思路:动态规划

65. 有效数字

  描述:

      ”99e2.5 " => false
      "53.5e93" => true
      " --6 " => false
      "-+3" => false
      "95a54e53" => false

  思路: 3个变量,一个是e的falg,一个是符号的flag,一个是num的flag不断往后遍历设置值

66. 加一

  描述:

    输入: [1,2,3]
    输出: [1,2,4]

  思路: 从后往前+1,进位初始0

67. 二进制求和

  描述:

    输入: a = "11", b = "1"
    输出: "100"

  思路: 从后往前相加,进位初始0

68. 文本对齐

  描述:

    输入:
      words = ["This", "is", "an", "example", "of", "text", "justification."]
      maxWidth = 16
    输出:
      [
         "This    is    an",
         "example  of text",
         "justification.  "
      ]

  思路:贪心,一行最大的单词个数

69. x的平方根

  描述:

    输入: 8
    输出: 2
    说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去

  思路:二分

70.爬楼梯

  动态规划。。

71. 简化路径

  描述:

    输入:"/a/../../b/../c//.//"
    输出:"/c"

  思路: 从前往后遍历判断即可。

72. 编辑距离

  动态规划

73. 矩阵置0

  描述:

    输入:
      [
        [0,1,2,0],
        [3,4,5,2],
        [1,3,1,5]
      ]
    输出:
      [
        [0,0,0,0],
        [0,4,5,0],
        [0,3,1,0]
      ]

  思路:遍历图中,把需要改为0的地方修改成固定的我们设定的值,-1000000.然后第二遍遍历的时候直接把这个数改为0.

74. 搜索二维矩阵

  描述:

    输入:
      matrix = [
      [1, 3, 5, 7],
      [10, 11, 16, 20],
      [23, 30, 34, 50]
      ]
      target = 3
    输出: true

  思路:从23开始判断,小于开始遍历此行,小于继续走上一行的第一个元素判断。(排场一行后,二分也可以)

75. 颜色分类

  描述:

    输入: [2,0,2,1,1,0]
    输出: [0,0,1,1,2,2]

  思路: 一个current指针,一个p0指向第一个,p2指向最后一个,当nums[current]=0,则与p0交换;=2与p2交换,=1右移

    

    While curr <= p2 :

    若 nums[curr] = 0 :交换第 curr个 和 第p0个 元素,并将指针都向右移。

    若 nums[curr] = 2 :交换第 curr个和第 p2个元素,并将 p2指针左移 。

    若 nums[curr] = 1 :将指针curr右移。

 

76. 最小覆盖子串

  描述:

    输入: S = "ADOBECODEBANC", T = "ABC"
    输出: "BANC"

   思路:滑动窗口

77. 组合

  描述:

    输入: n = 4, k = 2
    输出:
    [
    [2,4],
    [3,4],
    [2,3],
    [1,2],
    [1,3],
    [1,4],
    ]

  思路:回溯

78. 子集

  描述:

    输入: nums = [1,2,3]
    输出:
    [
    [3],
      [1],
      [2],
      [1,2,3],
      [1,3],
      [2,3],
      [1,2],
      []
    ]

  思路: 递归。从【】的子集是[],【1】是【】的子集中都添加1+【】

79. 单词搜索

  描述:

    board =
    [
      ['A','B','C','E'],
      ['S','F','C','S'],
      ['A','D','E','E']
    ]

      给定 word = "ABCCED", 返回 true
      给定 word = "SEE", 返回 true
      给定 word = "ABCB", 返回 false

  思路:先找到第一个字符的位置,然后开始上下左右找第二三四。。。。注意边界,。

80. 删除排序数组中的重复项 II

  描述:每个元素最多出现两次

    给定 nums = [0,0,1,1,1,1,2,3,3],

    函数应返回新长度 length = 7, 并且原数组的前五个元素被修改为 0, 0, 1, 1, 2, 3, 3 。

  思路:两个指针和一个计数器即可。

81. 搜索旋转排序数组

  描述:

    输入: nums = [2,5,6,0,0,1,2], target = 0
    输出: true

  思路:二分

82. 删除排序链表中的重复元素 II

  描述:

    输入: 1->2->3->3->4->4->5
    输出: 1->2->5

  思路:第一个指针为第一个数字前的一个,第二个用于判断是否重复

83.  删除排序链表中的重复元素

  描述:

    输入: 1->1->2
    输出: 1->2
  思路:雷同82

84. 柱状图中最大的矩形

  描述:

    

 

 

   思路:单调栈

85. 最大矩形

  描述:

    输入:
    [
    ["1","0","1","0","0"],
    ["1","0","1","1","1"],
    ["1","1","1","1","1"],
    ["1","0","0","1","0"]
    ]
    输出: 6

  思路:动态规划。dp[i][j][0]=dp[i-1][j][0]+1(nums[i][j]w==1)从当前节点能往左走多少个点。。。dp[i][j][1]不熬是往上

86. 分隔链表

  描述:

    输入: head = 1->4->3->2->5->2, x = 3
    输出: 1->2->2->4->3->5

  思路:修改指针即可;或者分成两个链表(一个是小于3,一个大于,然后合并)

87. 扰乱字符串

  描述:

    输入: s1 = "great", s2 = "rgeat"
    输出: true

  思路: 动态规划即可。dp[i]][j][len]表示s1从i开始和s2从j开始的长度为len是否可以变换。左子树和右子树交换相等还是左子树等于右子树

88.  合并两个有序数组

  描述:

    输入:
    nums1 = [1,2,3,0,0,0], m = 3
    nums2 = [2,5,6], n = 3

    输出: [1,2,2,3,5,6]

  思路: 从后往前。

89. 格雷编码

90.  子集 II

  描述:

    输入: [1,2,2]
    输出:
      [
      [2],
      [1],
      [1,2,2],
      [2,2],
      1,2],
      []
      ]

  思路:回溯。

91. 解码方法

  描述:

    输入: "12"
    输出: 2
    解释: 它可以解码为 "AB"(1 2)或者 "L"(12)。  

  思路: 动态规划

92. 反转链表 II

  描述:

    输入: 1->2->3->4->5->NULL, m = 2, n = 4
    输出: 1->4->3->2->5->NULL

  思路:指针走到m-1开始记录,将m~n采用插入的方式。

93. 复原IP地址

  描述:

    输入: "25525511135"
    输出: ["255.255.11.135", "255.255.111.35"]

  思路: 回溯+剪枝

94. 二叉树的中序遍历

  描述:

    

 

 

   思路:递归 左中右;栈

95. 不同的二叉搜索树 II

  描述:

    

 

 

   思路:回溯

96. 不同的二叉搜索树

  描述:

    

 

 

   思路:卡特兰数

97. 交错字符串

  描述:

    输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
    输出: true

  思路:动态规划。dp[i][j]表示s1[i]与s2[j]能否构成s3的i+j

98.  验证二叉搜索树

  描述:

    

  思路: 递归。

99. 恢复二叉搜索树

  描述: 

    

 

   思路:先通过中序找到哪两个节点位置不对,交换即可。

100. 相同的树

  描述:判断两个树是否一样。

  思路:递归 判断根节点

 

posted @ 2020-07-05 07:40  _Meditation  阅读(200)  评论(0编辑  收藏  举报