![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 52
.西瓜.
这个作者很懒,什么都没留下…
展开
-
下一个排列,字符串排列
一个整数的下一个排列实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列(即,组合出下一个更大的整数)。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。算法推导以 1,2,3,4,5,6 为例,其排列依次为:123456 123465 123546 … 654321可以看到有这样的关系:123456 < 123465 < 123546 <… < 654321。原创 2021-10-27 21:43:42 · 188 阅读 · 0 评论 -
二叉排序树
二叉排序树(Binary Sort Tree),又称二叉查找树。它是一颗空树,或者具有下列性质:若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树分别为二叉排序树。二叉搜索树的后序遍历序列输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5 / \ 2原创 2021-10-22 20:37:50 · 158 阅读 · 0 评论 -
从上到下打印二叉树 (双括号初始化、实例初始化块)
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回:[3,9,20,15,7]bfs广度优先 class Solution { public int[] levelOrder(TreeNode root) { if(root == null)return new int[.原创 2021-10-19 11:58:05 · 133 阅读 · 0 评论 -
螺旋数组 模拟
输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]限制:0 <= matrix.length <= 100 0 <= matrix[i].length <.原创 2021-10-16 15:37:12 · 51 阅读 · 0 评论 -
找出 表示数字的字符串
思路与算法根据上面的描述,现在可以定义自动机的「状态集合」了。那么怎么挖掘出所有可能的状态呢?一个常用的技巧是,用「当前处理到字符串的哪个部分」当作状态的表述。根据这一技巧,不难挖掘出所有状态:起始的空格符号位整数部分左侧有整数的小数点左侧无整数的小数点(根据前面的第二条额外规则,需要对左侧有无整数的两种小数点做区分)小数部分字符 \text{e}e指数部分的符号位指数部分的整数部分末尾的空格下一步是找出「初始状态」和「接受状态」的集合。根据题意,「初始状态」应当为状态 1,而「接原创 2021-10-04 17:56:51 · 69 阅读 · 0 评论 -
打印从1到最大的n位数(包含大数情况)
打印从1到最大的n位数输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。示例 1:输入: n = 1 输出: [1,2,3,4,5,6,7,8,9]说明:用返回一个整数列表来代替打印 n 为正整数方法一:字符串 -->数字public class MAain { StringBuilder res; int n; char[] num, loop = {'0', '1',原创 2021-10-02 14:18:17 · 241 阅读 · 0 评论 -
简单理解快速幂
简单理解快速幂原创 2021-10-01 11:07:35 · 61 阅读 · 0 评论 -
二进制中1的个数
方法一:循环检查二进制位public class Solution { // you need to treat n as an unsigned value public int hammingWeight(int n) { int count = 0; for(int i = 0; i < 32; i++){ //int型一共三十二位 if((n & (1 << i)) != 0){原创 2021-09-30 16:02:08 · 71 阅读 · 0 评论 -
剪绳子 01
给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2 输出: 1 解释: 2 = 1 + 1, 1 × 1 = 1示例 2:输入: 10 输出: 36 解释: 10 = 3 + 3 + 4, 3 × 3 × .原创 2021-09-28 20:49:31 · 57 阅读 · 0 评论 -
跳跃数组 03
这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处。当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]。请你判断自己是否能够跳到对应元素值为 0 的 任一 下标处。注意,不管是什么情况下,你都无法跳到数组之外。示例 1:输入:arr = [4,2,3,0,3,1,2], start = 5 输出:true 解释: 到达值为 0 的下标 3 有以下可能方案:下标 5 -> 下标 4 -> 下标 1 -> 下标 3 .原创 2021-09-26 10:43:47 · 56 阅读 · 0 评论 -
跳跃数组 02
给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。假设你总是可以到达数组的最后一个位置。示例 1:输入: nums = [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。示例 2:输入: nums = [2,3,0,1,4] 输出: 2提示:1 .原创 2021-09-26 02:36:07 · 183 阅读 · 0 评论 -
跳跃数组 01
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。示例 1:输入:nums = [2,3,1,1,4]输出:true解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。示例 2:输入:nums = [3,2,1,0,4]输出:false解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后.原创 2021-09-25 15:48:08 · 206 阅读 · 0 评论