
编程题
ZWL2333
这个作者很懒,什么都没留下…
展开
-
31.下一个排列
解题思路用两个循环数组来确定要交换的左右两个数第一个数组确定左边第二个数组确定右边左边要比右边小才能进行交换1.从后往前遍历,如果后面的数就已经可交换字典序了,那自然不用管前面的了2.左边要交换的数要从后往前遍历,右边交换的数也要从后往前遍历,因为右边的数已经是从大到小排列的了,不然左边要交换的数早就在1中被锁定了,到不了当前这个元素这步3.将left右边的数进行升序排列,来达到最小的效果代码下面展示一些 内联代码片。class Solution { //判断当前的是不.原创 2020-12-31 14:24:03 · 195 阅读 · 1 评论 -
22.括号生成
标题解题思路1.用回溯的方法,对下一个情况进行判断,根据传入的是左括号还是右括号来处理2.count指已输入的左括号,count1指还未删除的左括号,这两个都是用int来存的,因为int是值传递,在函数中进行修改不会影响值本身,而如果将count改为stack类型的数,就会改变本身的值,这样就会很麻烦。代码下面展示一些 内联代码片。// A code blockvar foo = 'bar';// An highlighted blockvar foo = 'bar';class原创 2020-12-30 16:43:59 · 113 阅读 · 0 评论 -
17. 电话号码的字母组合
解题思路此题可以用递归的方法从上一个数字往下递归,形成树的结构用String的话不用删除原先加入的字母,比较方便,因为String是复制一个备份到函数中,不会改变原来的String用StringBuilder的话在结束递归后得把加入的字母删除代码下面展示一些 内联代码片。class Solution { ArrayList<String>ans=new ArrayList<>(); String []numberlist= {.原创 2020-12-30 14:11:09 · 117 阅读 · 0 评论 -
15.三数之和
题目描述解题思路用两个循环,时间复杂度为n的平方最关键的问题是去重首先对数组进行排序,排序后固定一个数 nums[i]nums[i],再使用左右指针指向 nums[i]nums[i]后面的两端,数字分别为 nums[L]nums[L] 和 nums[R]nums[R],计算三个数的和 sumsum 判断是否满足为 00,满足则添加进结果集如果 nums[i]nums[i]大于 00,则三数之和必然无法等于 00,结束循环如果 nums[i]nums[i] == nums[i-1]nums[i−原创 2020-12-27 20:49:54 · 170 阅读 · 0 评论 -
12.整数转罗马数字
代码public class Solution {public String intToRoman(int num) { // 把阿拉伯数字与罗马数字可能出现的所有情况和对应关系,放在两个数组中,并且按照阿拉伯数字的大小降序排列 int[] nums = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; String[] romans = {"M", "CM", "D", "CD", "C", "XC", "L",..原创 2020-12-27 15:18:08 · 103 阅读 · 0 评论 -
11.盛最多水的容器
代码class Solution {public int maxArea(int[] height) {int size=height.length;int left=0,right=size-1;int max=0;while(left<right){if(height[left]<=height[right]){int sum=(right-left)*height[left];left++;if (sum>max)max=sum;}else{in..原创 2020-12-25 19:16:49 · 116 阅读 · 0 评论 -
9. 回文数
解题思路不将整数转换为字符串1.得到整数的位数,判断出整数是几位数的2.得出当前整数的最高位和最低位,进行比较是否相同3.如果相同,则将整数用几位数取余再/10则可得出当前整数去除最高位和最低位后的新整数int div = 1;//while (x / div >= 10) div *= 10;获取整数是几位数的代码总体代码class Solution {public boolean isPalindrome(int x) {//边界判断if (x < 0) retu.原创 2020-12-22 16:17:12 · 124 阅读 · 0 评论 -
整数反转
需要注意的点判断整数溢出if (count>214748364 || (count214748364 && z>7)) {return 0;}if (count<-214748364 || (count-214748364 && z<-8)) {return 0;}数据范围为-2147483648 到2147483647[-231~231-1]注意,要先提前判断整数是否会溢出,在确定了整数不会溢出后再把最后一位加到整数上count.原创 2020-12-21 17:15:05 · 192 阅读 · 0 评论 -
剑指 Offer 32 - I. 从上到下打印二叉树
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回:[3,9,20,15,7]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。解题思路用一个数列来完成层次原创 2020-11-20 22:03:08 · 101 阅读 · 0 评论 -
树的子结构
剑指 Offer 26. 树的子结构输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A:3/ 4 5/ 1 2给定的树 B:4/1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,1,2], B = [4,1]输出:true代原创 2020-11-19 18:04:45 · 108 阅读 · 0 评论 -
剑指 Offer 27. 二叉树的镜像
剑指 Offer 27. 二叉树的镜像请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 4/ 2 7/ \ / 1 3 6 9镜像输出: 4/ 7 2/ \ / 9 6 3 1示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]限制:0 <= 节点个数 <= 1000注意:本题与主站 226 题相同:https://leetcode-cn.com/p原创 2020-11-17 10:24:51 · 93 阅读 · 0 评论 -
105. 从前序与中序遍历序列构造二叉树
从前序与中序遍历序列构造二叉树根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:3/ 9 20/ 15 7解题思路用递归的方式前序遍历的数组为 根节点–左子树–右子树中序遍历的数组为 左子树–根节点–右子树递归数组要传入两个遍历数组,当前树的前序遍历数组的左边界下标和右边界下标,同理还有当.原创 2020-11-16 15:24:42 · 124 阅读 · 0 评论 -
跳台阶
时间复杂度很麻烦的算法,class Solution { //直接递归的话会超时 public int numWays(int n) { // int num1=n+1; // int array[]=new array[num1]; if(n==0) return 1; if(n==1) return 1; if (n==2)原创 2020-11-15 20:42:14 · 86 阅读 · 0 评论 -
剑指 Offer 11. 旋转数组的最小数字
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof原创 2020-11-15 16:00:30 · 80 阅读 · 0 评论 -
用两个栈实现队列
用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型 public class Solution { Stack<Integer> stack1 = new Stack<Integer>(); Stack<Integer> stack2 = new Stack<Integer>(); public void push(int node) {原创 2020-11-07 21:49:52 · 114 阅读 · 0 评论 -
判断字符串中的各种括号是否是正确对应的
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: true下面展示一些 内联代码片。cla原创 2020-11-05 21:24:11 · 1329 阅读 · 0 评论 -
合并两个排序好的链表
将两个有序的链表合并为一个新链表,要求新的链表是通过拼接两个链表的节点来生成的。下面展示一些 内联代码片。// A code block/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */class Solution { public Li原创 2020-10-20 21:53:51 · 259 阅读 · 0 评论