Day 37

第415题:

给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。(来自LeetCode)

1、其实就是字符串样式的数字,将两个字符串内的每个字符都对应相加;

  利用add作为标签记录是否有进位;

  按位相加得出结果。

  

第113题:

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。(来自LeetCode)

1、利用深度优先遍历的前序遍历来判断每一条路径是否等于目标和;

  利用双向队列的栈属性来存储元素;

  深度优先遍历的前序遍历首先将根节点入栈;

  然后递归判断每条向下的路径;

  其实首先就是判断根节点一直向左的这条路径和;

  当不符合时就将最后一个节点从栈推出,返回上一级递归判断右子树;

  没有则再返回上一层,一直返回至根节点,再递归判断根节点和其右子树构成的路径;

  其中每次判断此时到达的节点是否是根节点和路径和是否满足目标和;

  满足就将此时的队列添加到集合中,然后回到上一层递归寻找其他的路径和;

  

第31题:

实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

必须原地修改,只允许使用额外常数空间。来源:力扣(LeetCode)

以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1

1、每次给定的一组数字,它们排列出来有一定规律;

  例如1、2、3,可以排(1、2、3)(1、3、2)(2、1、3)(2、3、1)(3、1、2)(3、2、1);

  从中可以找出规律,当是其中某个排列时,把它后面的那个排列求出来即可;

  • 先从后往前遍历,如果全是升序排列的,那么这个排列就是最大排列了,只需将排列全部反转即可;  
  • 如果一直升序排列,然后遇到的这个数nums[i]<nums[i+1];那就需要找到这个排列后面的那个排列,从后向前寻找第一个大于nums[i]的那个元素和nums[i]交换,然后将nums[i]后面的元素全部反转即可;

  两种情况,得出结果。

  

第125题:

给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。

说明:本题中,我们将空字符串定义为有效的回文串。(来自LeetCode)

  

 1、使用双指针从字符串两端来比较,当不是字母和数字的时候跳过,当left>=right结束。

  

原文地址:https://www.cnblogs.com/liang-yi-/p/13437156.html