![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
我是菜狗救救我
这个作者很懒,什么都没留下…
展开
-
Java实现字符串的排序以及全排列变形题目(求字符的所有组合、国际象棋8皇后问题)
题目要求输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则按字典序打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。代码思路1.首先考虑递归。例如输入字符串abcd,提取第一个字符a,交换bcd的位置;提取第一个字符b,交换acd的位置…以此类推。整个核心代码就是一手交换,难点在于确定每一步的“第一个元素”。2.接着考虑如何去重与排序,由于Collcetion集合中提供了Set接口:存储无序的(不等于随机性,根据数据的hash原创 2020-09-02 14:32:01 · 581 阅读 · 0 评论 -
通过简单的死锁实例来理解同步监视器与死锁
在介绍死锁的概念之前,首先对线程的生命周期进行复习。线程的生命周期新建:Thread thread=new Thread();,用new关键字创建一个线程后,构造方法中将当前thread对象加入ThreadGroup,虚拟机为其分配内存。就绪:调用线程实例的start(),JVM为其创建方法调用栈和程序计数器,线程何时开始运行取决于JVM里线程调度器的调度。阻塞:如果处于就绪状态的线程获得了CPU,开始执行run方法的线程执行体,则该线程处于运行状态,如果计算机只有一个CPU,那么在任何时刻只有一个原创 2020-08-19 11:02:05 · 155 阅读 · 0 评论 -
剑指offer34:二叉树中和为某一值的路径(最全解题方法总结和遇到的坑及反思)
题目输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。如图所示:思路我的思路是递归:递归方法是返回当前路径下匹配目标值的路径。共有几种情况:当节点为空,return当和大于目标值,return当和等于目标值 并且 节点下无其他节点节点下无其他节点说明是叶子节点,并且路径值的和满足了目标值,添加到结果中 并且return当和小于目标值,继续递归遇到的坑第一眼看到这道题的时候原创 2020-08-13 10:50:12 · 112 阅读 · 0 评论 -
Java实现剑指Offer27: 树的子结构以及遇到的坑
题目输入两颗二叉树A和B,判断B是不是A的子结构。例如,右边的树是左边的树的子结构。分析1.在大树中找到和小树根节点相同的节点。2.然后以此节点为根节点,在大树上往下搜索对比小书左右节点是否相同,不同则返回false3.如果2步中最后返回false 回到第一步,从大树的左子树找和小树根节点相同的节点。4.如果3步中最后返回false 回到第一步,从大树的右子树找和小树根节点相同的节点。代码思路两个递归解决该问题。首先创建一个名为HasSubtree的方法来判断大树中有没有和小树根节点相同的原创 2020-08-10 14:55:32 · 91 阅读 · 0 评论 -
剑指offer25:合并两个排序链表的两种解法(递归与非递归)Java
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。非递归遍历两个链表,按大小顺序拼接public ListNode Merge(ListNode list1, ListNode list2) { ListNode head = new ListNode(0); ListNode movnode = head; while (list1 != null && list2 != null) { i原创 2020-08-10 10:23:04 · 118 阅读 · 0 评论 -
剑指offer:正则表达式匹配Java实现以及错误反思
题目描述请实现一个函数用来匹配包括’.‘和星号的正则表达式。模式中的字符’.'表示任意一个字符,而星号表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。代码思路当模式中的第二个字符是星号时:如果字符串第一个字符跟模式第一个字符不匹配,则模式后移2个字符,继续匹配(相当于星号前面的)。如果字符串第一个星号字符跟模式第一个字符匹配,可以有3种匹配方式:1.模原创 2020-08-08 15:04:52 · 124 阅读 · 0 评论 -
Java 中的 String的不可变性/Java中replace()深层理解/剑指offer替换空格理解
今天在做剑指offer第三题替换空格时,产生了这样的疑问,先看一段代码: public String replaceSpace(StringBuffer str) { String string = str.toString(); string.replace(" ","%20"); return string; }可是为什么执行string.replace之后,string的内容没有改变呢?这需要从String对象的本质讲起。什么是不可变对原创 2020-08-02 17:44:49 · 263 阅读 · 0 评论 -
Java初学者对抽象类及接口注意事项的理解
抽象类注意事项抽象类不能创建对象,我们只能创建其非抽象子类的对象抽象类可以有构造方法,是提供其子类创建对象时,初始化父类成员使用的抽象类不一定包含抽象方法,但包含抽象方法的一定是抽象类抽象类的子类必须重写其抽象父类的全部抽象方法,除非该子类也是一个抽象类接口注意事项接口是引用数据类型,是一个类的公共规范,和定义一个类基本一致,关键字class换interface接口可以定义抽象方法,但修饰符必须是public abstract,并且可以省略接口不能直接使用,需原创 2020-07-30 11:40:23 · 160 阅读 · 0 评论 -
Java中方法的参数传递初学者常见的问题与堆栈理解
在C语言中,如果函数的形参是指针类型,那么在函数体中,修改该形参,实参也会产生相应变化在Java中,由于类的实例化在堆中完成,方法的形参在栈中创建,这时会产生一种新手常见的错误(可能理解的不透彻,欢迎讨论)先看下面一段代码import javafx.scene.shape.Circle;public class ClassTest { public static void main(String[] args) { ClassTest classTest = new Cla原创 2020-07-27 20:07:40 · 238 阅读 · 1 评论 -
Java中的基本数据类型和引用数据类型的联系与区别
Java提供了两类数据类型:一种是基本数据(原始类型),一种是引用类型。数据类型图:基本数据类型:注意:1.在基本数据类型中,除了boolean类型所占长度与平台有关外,其他数据类型长度都是与平台无关的。比如:int永远占4个字节(1 Byte=8 bit)2.基本数据类型的默认值仅在作为类中属性时生效在方法内部必须先对基本数据类型变量赋值后才能使用,否则编译不通过。eg:基本数据类型——类型转换 1):小类型的变量赋值给大类型,会自动转换 2):大类型的变量赋值给小类型,强制原创 2020-07-27 15:10:40 · 510 阅读 · 0 评论