LeetCode打卡
山河执手
这个作者很懒,什么都没留下…
展开
-
字符逆序
字符逆序题目描述将一个字符串str的内容颠倒过来,并输出。str的长度不超过100个字符。输入输入包括一行。 第一行输入的字符串。输出输出转换好的逆序字符串。样例输入I am a student样例输出tneduts a ma I算法思想这是一条蓝桥杯的入门题,本身是不难的,但是通过率只有51%,问题可能就出在对于常用的操作字符串的方法不熟悉。所以以下列出了常用的方法。#String1.charAt(int i);//返回索引i处的字符2.toCharArray();//返回此原创 2021-04-04 22:56:40 · 182 阅读 · 2 评论 -
母牛的故事
母牛的故事题目描述有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?输入输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。n=0表示输入数据的结束,不做处理。输出对于每个测试实例,输出在第n年的时候母牛的数量。每个输出占一行。样例输入2450样例输出246我们都知道同一条题可以用不同的算法思想来解决。接下来我会用两种不同的思想原创 2021-04-03 16:23:46 · 235 阅读 · 0 评论 -
迷宫问题
迷宫问题题目描述下图给出了一个迷宫的平面图,其中标记为 1 的为障碍,标记为 0 的为可 以通行的地方。010000000100001001110000原创 2021-04-03 10:20:39 · 746 阅读 · 5 评论 -
蛇形填数
蛇形填数这是一条经典的模拟题,按照题目意思按步编写代码即可!难点:要能妥善处理好数组边界,选择合适的起始点public class Main { public static void main(String[] args) { int[][] arr=new int[50][50]; int x=0;//当前行 int y=1;//当前列 int num=2;//开始自增的值 //模拟填数过程 wh原创 2021-03-26 19:36:50 · 123 阅读 · 0 评论 -
承压计算
承压计算1.在做这条题时,我们没有必要被题目的输入数据所影响,我们可以根据自己的想法进行变形。以下是对数据的变形,目的是便于操作。75 87 8 89 2 7 28 1 4 9 18 1 8 8 4 17 9 6 1 4 5 45 6 5 5 6 9 5 65 5 4 7 9 3 5 5 17 5 7 9 7 4 7 3 3 14 6 4 5 5 8 8 3 2 4 31 1 3 3 1 6 6 5 5 4 4 29 9 9 2 1 9 1 9 2 9 5 7 94 3 3 7原创 2021-03-26 14:30:17 · 550 阅读 · 1 评论 -
剪邮票java实现
剪邮票java实现题目描述如【图1.jpg】, 有12张连在一起的12生肖的邮票。现在你要从中剪下5张来,要求必须是连着的。(仅仅连接一个角不算相连)比如,【图2.jpg】,【图3.jpg】中,粉红色所示部分就是合格的剪取。请你计算,一共有多少种不同的剪取方法。请填写表示方案数目的整数。题目思路:1.首先得到所有从12个数中找5个数的排列2. 然后对数组进行赋值(模拟剪裁的动作)3. 对赋值完后的数组进行检查看是否满足连通性import java.util.ArrayList;i原创 2021-03-21 23:31:25 · 639 阅读 · 2 评论 -
组合问题
组合问题我们在做算法题的时候,肯定会遇到这样的问题:如何从n个数中选出k个数,求所有的组合问题。1.不同顺序看做不同组合的情况import java.util.ArrayList;import java.util.List;public class Main { public static void main(String[] args) { List<List<Integer>> combine = new Solution().combine原创 2021-03-20 16:40:25 · 347 阅读 · 3 评论 -
地宫取宝
地宫取宝第一种方法:深搜+模拟import java.util.*;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String s = scanner.nextLine(); String[] split = s.split(" "); int n = Integer.p原创 2021-03-07 15:03:32 · 163 阅读 · 3 评论 -
分糖果
分糖果八大基本算法之一的模拟算法,直接上代码:import java.util.Arrays;import java.util.Scanner;public class Main { static int count = 0; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int N = Integer.parseInt(scan原创 2021-03-06 20:07:02 · 127 阅读 · 1 评论 -
扑克序列
扑克序列直接上代码:import java.util.ArrayList;import java.util.List;public class Main { public static void main(String[] args) { List<List<Character>> res = new ArrayList<>(); List<Character> path = new ArrayList<原创 2021-03-05 22:31:06 · 104 阅读 · 2 评论 -
N皇后问题java实现
N皇后问题java实现简单来说就是dfs+回溯import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[][] map = new int[n][n]; dfs(map,原创 2021-02-25 22:14:38 · 302 阅读 · 0 评论 -
递归实现排列型枚举
递归实现排列型枚举把 1~n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序。输入格式一个整数n。输出格式按照从小到大的顺序输出所有方案,每行1个。首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。数据范围1≤n≤9输入样例:3输出样例:1 2 31 3 22 1 32 3 13 1 23 2 1这条题与前面两题的区别在于,这题需要剪枝,避免出现重复的结果。import java.util.Arra原创 2021-02-18 20:30:58 · 173 阅读 · 0 评论 -
递归实现组合型枚举
递归实现组合型枚举从 1~n 这 n 个整数中随机选出 m 个,输出所有可能的选择方案。输入格式两个整数 n,m ,在同一行用空格隔开。输出格式按照从小到大的顺序输出所有方案,每行1个。首先,同一行内的数升序排列,相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面(例如1 3 5 7排在1 3 6 8前面)。数据范围n>0 ,0≤m≤n ,n+(n−m)≤25输入样例:5 3输出样例:1 2 31 2 41 2 51 3原创 2021-02-18 19:48:49 · 134 阅读 · 0 评论 -
递归实现指数型枚举
递归实现指数型枚举从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数n。输出格式每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。对于没有选任何数的方案,输出空行。本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。数据范围1≤n≤15输入样例:3输出样例:322 311 31 21 2 3这条题主要思路就是将每个数选择还是不选择的情况列下来,形成一颗二叉树,然后对二叉树进行遍历,每一条枝原创 2021-02-18 19:14:46 · 230 阅读 · 3 评论 -
计算n阶行列式
计算n阶行列式拉普拉斯展开在数学中,拉普拉斯展开(或称拉普拉斯公式)是一个关于行列式的展开式。将一个n × n 的行列式进行拉普拉斯展开,即是将其表示成关于行列式的某一行(或某一列)的n个元素与其代数余子式乘积的和。余子式在n阶行列式中,把所在的第i行与第j列划去后,所留下来的n-1阶行列式为余子式。代数余子式在n阶行列式中,把元素aₒₑ所在的第o行和第e列划去后,留下来的n-1阶行列式叫做元素aₒₑi的余子式,记作Mₒₑ,将余子式Mₒₑ再乘以-1的o+e次幂记为Aₒₑ,Aₒₑ叫做元素原创 2021-02-18 13:24:17 · 2391 阅读 · 1 评论 -
leetcode--demo15三数之和
leetcode–demo15三数之和当时看到这一题的时候我首先想到就是dfs+回溯,我的思想其实很简单就是对自己构造的树形图进行递归遍历,当深度为3的时候进行返回,并将路径保存到列表当中,当然还要考虑一下结果去重以及重复元素的使用。(代码看不懂的去看我之前的博客,dfs套路是一样的)import java.util.*;public class Main { public static void main(String[] args) { int[] nums = {-1,原创 2021-02-03 15:31:54 · 119 阅读 · 1 评论 -
leetcode--demo94二叉树的中序遍历
leetcode–demo94二叉树的中序遍历解决这题我们首先要知道什么是中序遍历,简而言之就是按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。处理这种问题一般我们采用两种解决方法:一种递归,一种使用栈。第一种:递归class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() { } TreeNode(原创 2021-01-27 17:22:21 · 88 阅读 · 0 评论 -
leetcode--demo20有效的括号
leetcode–demo20有效的括号这题考的就是数据结构中栈的使用,此外就是括号匹配的问题,其他的也没啥了。import java.util.Stack;public class Main { public static void main(String[] args) { System.out.println(new Solution().isValid("([)]")); }}class Solution { public boolean isVa原创 2021-01-25 15:20:32 · 73 阅读 · 0 评论 -
leetcode--demo13罗马数字转整数
leetcode–demo13罗马数字转整数这条题主要考的就是Hash表,对Hash表进行初始化过后通过遍历的方式,对ans进行增加,要注意的是考虑6种两个字符的特殊情况。import java.util.HashMap;import java.util.Map;public class Main { public static void main(String[] args) { System.out.println(new Solution().romanToInt("原创 2021-01-25 14:39:33 · 89 阅读 · 0 评论 -
leetcode--demo39组合总和
leetcode–demo39组合总和对于这类题我们首先要明确考的是什么算法,不用说就是知道是dfs+回溯,既然是考dfs那么我们就要先画树形图,然后再编码。因为小编画图不好看,就直接用LeetCode上的图了。我们接着就要确定递归的终止条件,以及如何进行剪枝。当然你也可以偷懒不剪枝,最后对结果列表进行除重。import java.util.*;public class Main { public static void main(String[] args) { i原创 2021-01-24 17:10:32 · 110 阅读 · 4 评论 -
leetcode--demo17电话号码的自由组合
leetcode–demo17电话号码的自由组合这一题与46条全排列差不多,两个题一比较你就会发现这些题都是有套路的,都是dfs+回溯,知道题目考的什么算法那么处理起来就简单了。class Solution { public List<String> letterCombinations(String digits) { List<String> res=new ArrayList<>(); int n=digits.lengt原创 2021-01-22 19:32:28 · 114 阅读 · 1 评论 -
leetcode--demo65全排列2
leetcode–demo65全排列2这题与上一条的区别就在于列表中可能会出现重复元素。所以我们在处理这一题的时候要学会剪枝。比如列表是[1,1,2]的情况,如果第一次选择是以1开头,那么第二次选择时就需要把以1开的情况给砍掉。因为这两种情况是重复的。代码就是在64题的基础上添加一行if语句,目的是在回溯完成后进行下一次分支选择时,将重复分支砍掉。当然也可以先得到所有结果然后再删除重复的列表。class Solution { public List<List<Integer>&原创 2021-01-21 16:05:10 · 82 阅读 · 0 评论 -
leetcode--demo46全排列
leetcode–demo46全排列这道题首先要画出树形图,这样便于我们了解递归结构。主要思想就是dfs+回溯算法。class Solution1 { public List<List<Integer>> permute(int[] nums) { //使用一个动态数组保存所有可能的全排列 List<List<Integer>> res = new ArrayList<>(); if(n原创 2021-01-20 21:35:49 · 74 阅读 · 0 评论 -
leetcode--demo628三个数的最大乘积
leetcode–demo628三个数的最大乘积这题最主要的一点就是要考虑负数的情况三个数的最大乘积要么是排序完成后最后三个元素要么就是第一第二个以最后一个元素。import java.util.Arrays;public class Main { public static void main(String[] args) { int[] nums={1,2,3}; System.out.println(new Solution().maximumProd原创 2021-01-20 16:15:56 · 67 阅读 · 0 评论 -
leetcode--demo5最长回文子串
leetcode–demo5最长回文子串1.暴力算法主要思想:两层for循环得到所有子串,将符合条件的子串放到map集合中,对map集合中的key进行比较,找到key值最大的,最后将对应的value进行返回。这种方法时间复杂度为O(n3),对于数据规模比较大的时候会超时。import java.util.HashMap;import java.util.Map;public class Main { public static void main(String[] args) {原创 2021-01-20 15:18:26 · 82 阅读 · 2 评论 -
leetcode--demo4寻找两个正序数组的中位数
leetcode–demo4寻找两个正序数组的中位数这条题我的想法很暴力,合并两个数组,然后进行排序,通过结果数组获取中位数,一开始以为会超时没想到过了。import java.util.Arrays;public class Main { public static void main(String[] args) { int[] nums1={1,2}; int[] nums2={3,4}; System.out.println(new S原创 2021-01-19 17:32:38 · 60 阅读 · 0 评论 -
leetcode--demo70爬楼梯
leetcode–demo70爬楼梯这条题一开始我是用递归写的,结果超时了,之后就想到动态规划,跳到第n层的方法和就是跳到第n-1层的方法数+跳到第n-2层的方法数。class Solution { public int climbStairs(int n) { int[] dp=new int[n+1]; dp[0]=1; dp[1]=1; for (int i=2;i<=n;i++){ dp[i]=原创 2021-01-15 22:21:53 · 112 阅读 · 0 评论 -
leetcode--demo21合并两个有序链表
leetcode–demo21合并两个有序链表遇到这类问题不是递归就是迭代第一种:迭代基本思路:搞两个指针分别指向两个链表的头结点,比较值的大小,用较小的一方去创建结果链表的新结点,然后对应指针后移直到两个链表都遍历结束。也可以不去创建新的结点,看个人喜好。第二种:递归基本思路:找终止条件,以及递归的规律。//迭代的方式class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { /原创 2021-01-15 21:24:06 · 83 阅读 · 0 评论 -
leetcode--demo100相同的树
leetcode–demo100相同的树这条题我用的是深度优先如果使用广度优先将需要两个队列,相对比较麻烦。class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() { } TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right原创 2021-01-14 21:28:49 · 63 阅读 · 0 评论 -
leetcode--demo101对称二叉树
leetcode–demo101对称二叉树遇到这中问题一般还是使用常规的两种方法:bfs,dfs如何判断二叉树是否对称主要分为两步:第一就是判断左子树与右子树的结构是否相同,第二就是对应节点的值是否一样。class Solution { public boolean isSymmetric(TreeNode root) { return check(root.left, root.right); } public boolean check(TreeNode原创 2021-01-14 16:32:14 · 118 阅读 · 2 评论 -
leetcode--demo104二叉树的最大深度
leetcode–demo104二叉树的最大深度两种方法:dfs 和 bfsclass TreeNode { int val; TreeNode left; TreeNode right; TreeNode() { } TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this原创 2021-01-13 22:21:23 · 111 阅读 · 0 评论 -
leetcode--demo67二进制求和
leetcode–demo67二进制求和这条题首先考虑到的是使用内置函数。//参数radix表明参数是什么进制的,然而这种方法只能解决32位以内的数return Integer.toBinaryString(Integer.parseInt(a,2)+Integer.parseInt(b,2));但是如果字符串太长会出现溢出的情况,所以就考虑了其他方法。public String addBinary(String a, String b) { StringBuilder s=ne原创 2021-01-13 19:26:03 · 87 阅读 · 0 评论 -
leetcode--demo64最小路径和
leetcode–demo64最小路径和这条题就是简单的dp代码如下:public class Main { public static void main(String[] args) { int[][] grid={{1,3,1},{1,5,1},{4,2,1}}; System.out.println(new Solution().minPathSum(grid)); }}class Solution{ public int minP原创 2021-01-12 21:49:22 · 81 阅读 · 0 评论 -
leetcode--demo3无重复字符的最长子串
leetcode–demo3无重复字符的最长子串这题可以用暴力算法解决,然官方的题解更为简单。public int lengthOfLongestSubstring(String s) { // 哈希集合,记录每个字符是否出现过 Set<Character> set = new HashSet<Character>(); int n = s.length(); // 右指针,初始值为 -1,相当于我们在字符串的左边界原创 2021-01-12 18:34:14 · 63 阅读 · 0 评论 -
leetcode--demo2两数相加
leetcode–demo2两数相加在做这条时一开始是想通过遍历链表得到两个数,然后将两数相加得到其和,最后取余得到每个数字并以此创建节点。可题目是有节点数要求的,1到100之间。若用此法就需要开大数。个人觉得没有必要,所以换了思路。该思路就是每位相加,保存进位,让进位参与下一次计算中。import java.util.Arrays;public class ListNode { int val; ListNode next; ListNode() { }原创 2021-01-12 15:44:54 · 114 阅读 · 0 评论 -
leetcode--demo1两数之和
import java.util.Arrays;import java.util.HashMap;import java.util.Map;public class Main { public static void main(String[] args) { Solution solution = new Solution(); int[] nums=new int[]{2,7,11,15}; int target=9; S.原创 2020-12-22 23:31:13 · 101 阅读 · 0 评论