Leetcode
每日一练
是郭橙橙呀
这个作者很懒,什么都没留下…
展开
-
offer13 机器人的运动范围搜索题目(DFS、BFS)
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?方法一: DFS分析:因为 1<=n,m<=100,作为下标不超过99,所以可以原创 2021-04-27 21:59:21 · 74 阅读 · 0 评论 -
0427offer18+21
18.删除链表的节点思想:先找到要删除的节点的前一个节点,p指针指向它注意:判断空链表,单个节点的链表等等。class Solution { public ListNode deleteNode(ListNode head, int val) { if(head==null){ return head; } ListNode p = head; if(head.val==val){原创 2021-04-27 20:44:06 · 10912 阅读 · 0 评论 -
offer 15 二进制中1的个数
题目我的JS方法 转换成二进制字符串有个地方不明白,toString(2).toString();我直接写 toString()就不对/** * @param {number} n - a positive integer * @return {number} */var hammingWeight = function(n) { var num=0; n = n.toString(2); for(var i = 0; i < n.length; i++){原创 2021-04-21 21:43:57 · 61 阅读 · 0 评论 -
offer 14 i/ ii剪绳子/动态规划
题目https://leetcode-cn.com/problems/jian-sheng-zi-lcof/方法一:动态规划 时间O(n^2) 空间O(n)javaclass Solution { public int cuttingRope(int n) { int[] dp = new int[n+1]; for(int i = 2; i <= n; i++){ for(int j = 1; j <= i-1; j+原创 2021-04-21 19:49:10 · 79 阅读 · 0 评论 -
offfer12矩阵中的路径-回溯(DFS)
矩阵中的路径给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 “ABCCED”(单词中的字母已标出)。思路https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-j原创 2021-04-13 17:48:54 · 68 阅读 · 0 评论 -
offer 11旋转数组的最小数字 二分法
把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。方法一:依题意 可以使用双指针遍历 找出第一次降序的位置 即为所求当 prev > cur 此时的cur即为该旋转数组的最小值class Solution { public int minArray(int[] numbers) { int i = 0;原创 2021-04-11 21:44:33 · 68 阅读 · 0 评论 -
offer10斐波那契数列/青蛙跳台阶 动态规划
1.递归法:原理: 把 f(n)f(n) 问题的计算拆分成 f(n-1)f(n−1) 和 f(n-2)f(n−2) 两个子问题的计算,并递归,以 f(0)f(0) 和 f(1)f(1) 为终止条件。缺点: 大量重复的递归计算,例如 f(n)f(n) 和 f(n - 1)f(n−1) 两者向下递归需要 各自计算 f(n - 2)f(n−2) 的值。class Solution { public int fib(int n) { if(n==0) ret原创 2021-04-10 22:56:05 · 249 阅读 · 0 评论 -
offer09用两个栈实现队列
题目用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )解答class CQueue { public Stack<Integer> stackPush; public Stack<Integer> stackPop; public CQueue() { stackPu原创 2021-04-06 16:36:20 · 88 阅读 · 0 评论 -
leetcode剑指offer刷题记录
3.23 06 从头到尾打印链表题目输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。解答解法一:借用栈入栈: 遍历链表,将各节点值 push 入栈。(Python 使用 append() 方法,Java借助 LinkedList 的addLast()方法)。出栈: 将各节点值 pop 出栈,存储于数组并返回。(Python 直接返回 stack 的倒序列表,Java 新建一个数组,通过 popLast() 方法将各元素存入数组,实现倒序输出)。复杂度分析:时原创 2021-03-23 15:50:18 · 74 阅读 · 0 评论 -
leetcode剑指offer刷题记录
3.21 05 替换空格题目请实现一个函数,把字符串 s 中的每个空格替换成"%20"。解答public class offer05 { public static String replaceSpace(String s){ StringBuilder str = new StringBuilder(); for(Character c : s.toCharArray()){ if(c == ' '){原创 2021-03-21 10:16:41 · 38 阅读 · 0 评论 -
leetcode剑指offer刷题记录
3.19 04.二维数组中的查找题目在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解答import java.util.HashSet;public class Offer04 { public static boolean findNumberIn2DArray(int[][] matrix, int target){ Hash原创 2021-03-19 10:54:49 · 154 阅读 · 0 评论 -
leetcode刷题记录
3.16 第35题 搜索插入位置题目给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。解答思路:列表本身的元素有排序过的 逐一遍历列表里面的元素 与目标值比较 最后如果没有列表元素没有大于目标值的 说明目标值最大 排在列表最后。、import com.sun.xml.internal.xsom.XSTerm;//小心数组越界问题public class Solution35 {原创 2021-03-16 13:40:23 · 55 阅读 · 0 评论 -
leetcode刷题记录
3.13 第28题 实现strStr()题目实现strStr()函数。给定一个haystack字符串和一个needle 字符串,在haystack字符串中找出needle字符串出现的第一个位置(从0开始)。如果不存在,则返回-1。解答使用indexOf()函数。public class Solution28 { public static int strStr(String haystack, String needle){ return haystack.indexO原创 2021-03-13 14:57:15 · 40 阅读 · 0 评论 -
leetcode刷题记录
第27题 移除元素题目给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。解答思路:双指针public class Solution27 { public static int removeElement(int[] nums,int val){ if(nums.l原创 2021-03-12 09:40:31 · 41 阅读 · 0 评论 -
leetcode刷题记录
3.11刷题记录第26题 删除排序数组中的重复项题目给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。解答1、数据是有序的,说明相同的元素总在一起2、不要使用额外的数组空间,这个就限制了使用treeSet的方法所以这个题可以理解为:在一个有序数组中找到所有不同的元素的个数对于这道题目,我们可以通过最蛮力的方法解决,就是两层for循环嵌套原创 2021-03-11 12:44:43 · 71 阅读 · 0 评论 -
leetcode刷题记录
3.10 leetcode刷题记录第20题 有效的括号题目解答知识点java Stack类 堆栈toCharArray()第20题 有效的括号题目给定一个只包括 ‘(’ ,’)’ , ‘{’ , ‘}’ , ‘[’ , ‘]’ 的字符串s,判断字符串是否有效。有效字符串必须满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。解答利用一个栈记录遍历到的左括号对应的右括号当右括号出现,若栈顶与右括号一致则合法,反之不合法import java.util.Stack;原创 2021-03-10 11:09:58 · 61 阅读 · 0 评论