自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 收藏
  • 关注

原创 字符串相乘

给定两个以字符串形式表示的非负整数num1和num2,返回num1和num2的乘积,它们的乘积也表示为字符串形式。不能使用任何内置的 BigInteger 库或直接将输入转换为整数。"6""56088"解题思路·:本题要求计算两个以字符串形式表示的非负整数num1和num2的乘积,并且不允许使用内置的BigInteger库,也不能直接将输入的字符串转换为整数。我们可以模拟手工乘法的过程来解决这个问题,即将一个数的每一位与另一个数的每一位相乘,然后将结果累加起来。如果num1或者num2为"0"

2025-03-16 18:21:17 920

原创 不同路径——2

System.out.println("从左上角到右下角的不同路径数量为: " + result);移动过来,所以到达该位置的不同路径数量等于到达上方位置的路径数量加上到达左方位置的路径数量,即。System.out.println("输入的网格为空,请重新输入。的不同路径数量,且机器人每次只能向下或向右移动一步,移动路径中不能包含障碍物。// 如果起点是障碍物,无法移动,路径数为 0。1. 向右 -> 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右 -> 向右。

2025-03-16 18:08:28 466

原创 不同路径——1

/ 状态转移方程:到达当前位置 (i, j) 的路径数等于到达上方位置 (i - 1, j) 的路径数加上到达左方位置 (i, j - 1) 的路径数。// 初始化第一列,因为从左上角只能一直向下走到达第一列的每个位置,所以路径数都为 1。),因为机器人只能从左上角一直向下移动才能到达这些位置,所以到达这些位置的路径也只有一种,即。),因为机器人只能从左上角一直向右移动才能到达这些位置,所以到达这些位置的路径只有一种,即。的不同路径数量与到达其上方和左方位置的不同路径数量有关,设。

2025-03-16 17:55:17 574

原创 小偷之打家劫舍

dp[i]

2025-01-26 17:39:22 758

原创 在排序数组中查找元素的第一个和最后一个位置

给你一个按照非递减顺序排列的整数数组nums,和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target,返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。nums = [[3,4]nums = [[-1,-1][-1,-1]解题思路:为了满足时间复杂度 的要求,我们可以使用二分查找算法。二分查找的基本思想是每次将搜索区间缩小一半,从而快速定位目标元素。

2025-01-26 17:29:58 948

原创 整数转罗马数字

使用一个循环来不断从输入的整数中减去最大可能的罗马数字对应的值,并将相应的符号添加到结果字符串中,直到整数减为 0。,表示当当前的整数大于或等于当前罗马数字对应的值时,将对应的符号添加到结果中,并从整数中减去该值。System.out.println("对应的罗马数字是: " + romanNumber);System.out.print("请输入一个大于 0 的整数: ");3000 = MMM 由于 1000 (M) + 1000 (M) + 1000 (M)加 1,尝试下一个较小的罗马数字对应的值。

2025-01-26 17:13:17 439

原创 平衡二叉树

,创建好新的非空子节点后将其加入队列,以便后续继续处理它们的子节点,如此循环,直到队列为空或者数组元素已全部处理完,最终完成二叉树的构建。对于任意一个节点,先判断其是否为。然后递归地调用该方法分别计算其左子树高度和右子树高度,在得到左右子树高度后,检查当前节点的左右子树高度差,如果高度差绝对值大于。),每次从队列中取出一个节点(代表当前正在构建子树的父节点),按顺序为其设置左子节点和右子节点(如果数组对应位置元素不为。// 计算二叉树节点的高度,同时在计算过程中判断子树是否平衡,优化后的方法。

2024-12-15 18:48:46 478

原创 将有序数组转换为二叉搜索树

随着递归不断深入和回溯,每一层的子树构建完成后都会返回其对应的根节点,最终整个树的根节点以及完整的树结构就构建好了。从最顶层来看,一开始构建的根节点以及其左右子树整合起来就是一棵完整的平衡二叉搜索树。以刚才选取的根节点为界,其左侧的元素可以用来构建左子树。同理,根节点右侧的元素用于构建右子树,右子树中的所有节点值都要大于根节点值。同样递归调用构建树的方法,传入右子树对应的数组范围(索引范围从。),继续按照同样的规则选取中间元素作为子树的根节点,不断重复这个过程,直到子树对应的数组范围为空(也就是。

2024-12-15 18:00:44 544

原创 二叉树的最大深度

否则用首个值创建根节点入队列,从第二个值开始循环,每次取队列节点,按顺序依值构建左右子树节点(非 “null” 时创建并加入队列),最后返回根节点完成树构建。System.out.println("请按层序遍历顺序输入二叉树节点值(使用null表示空节点),节点值之间用空格隔开,输入完成后按回车键:");:先看根节点,为空则树对称返回 true,不为空就调 isMirror 方法判断左右子树是否镜像对称。// 整棵树的深度 = 左右子树深度较大值 + 1(根节点这一层)// 计算二叉树最大深度的方法。

2024-12-08 18:47:48 516

原创 对称二叉树

从输入数组的第二个值开始(用索引标记位置),每次从队列拿出一个节点(当作父节点),按顺序看对应的值能不能构建左子树节点、右子树节点,如果能构建就创建新节点加到队列里,不断循环这个过程,直到把所有输入值对应的节点都构建好,最后返回根节点,这样二叉树就构建完成了。要是左右子树有一个为空,另一个不为空,那就不对称,返回 false。相等的话,就接着递归地去判断左子树的左子树和右子树的右子树是不是对称,以及左子树的右子树和右子树的左子树是不是对称,这两个小判断都为 true,整体才是对称的,返回 true。

2024-12-08 18:27:12 839

原创 相同的二叉树

先处理输入为空的边界情况,返回空树。然后从输入首元素创建根节点并入队列,按层序遍历顺序,依输入内容为节点构建左、右子树(非 “#” 表示有节点,创建并关联后入队列),最终返回根节点。System.out.println("请按照层序遍历顺序输入第二棵二叉树节点值(用空格隔开,空节点用#表示):");// 如果两棵树当前节点都为空,说明同步遍历到了叶子节点的下一层,认为相同。// 如果其中一棵为空,另一棵不为空,结构不同,返回False。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

2024-12-01 19:03:32 572

原创 二叉树的中序遍历

然后利用队列循环处理,每次取出队首节点,按输入顺序为其构建左、右子树(非 “#” 表示有节点,创建并关联后入队列),直至队空或处理完输入,最终返回根节点。System.out.println("请按照层序遍历顺序输入二叉树节点值(用空格隔开,空节点用#表示):");:递归遍历,先处理左子树,再把当前节点值加入结果列表,最后处理右子树,以此实现中序遍历逻辑。// 将当前节点的值加入结果列表。方法开启遍历,最后返回结果列表/2、inorder。// 递归遍历左子树。// 递归遍历右子树。:创建结果列表,调用。

2024-12-01 18:54:50 722

原创 合并两个有序数组

int[] nums1Valid = getArrayFromInput("请按非递减顺序输入nums1数组的有效元素:", m);int[] nums2 = getArrayFromInput("请按非递减顺序输入nums2数组的元素:", n);System.out.println("请输入nums1数组的有效元素个数:");System.out.println("请输入nums2数组的有效元素个数:");System.out.println("输入不合法,请输入整数!// 清除输入缓冲区的无效内容。

2024-11-24 20:56:19 635

原创 删除排序链表中的重复元素

用指针遍历链表,若当前节点值与下一节点值相等,跳过重复节点(调整指针指向);若不等,指针后移,直至遍历完链表,返回处理后的头节点。从链表头开始,用指针依次访问每个节点,输出节点值并添加空格分隔,直到指针指向。(空链表),否则将首元素转为整数创建头节点,再循环遍历数组剩余元素,依次创建新节点并连接到链表上,最后返回头节点。System.out.println("请输入链表元素:");获取用户输入的以空格分隔的链表元素字符串,分割成字符串数组。// 创建链表的方法。// 打印链表的方法。// 定义链表节点类。

2024-11-24 20:45:24 437

原创 二进制求和

只要两数有位没处理或有进位就循环,先将进位赋给和值,再分别累加两数对应位数字,把和值取余 2 的结果插入结果字符串开头作为当前位结果,和值除以 2 得到新进位。循环结束后,将构建好的结果字符串返回,就是两二进制数相加的结果。System.out.println("请输入a:");System.out.println("请输入b:");首先获取两个二进制字符串末尾索引,设进位为 0,用。,以二进制字符串的形式返回它们的和。给你两个二进制字符串。

2024-11-17 19:09:40 289

原创 数组元素加1

System.out.println("请输入表示整数的数字数组,元素之间用空格隔开:");循环从数组末尾开始倒序遍历。先给当前数位加一,再用取余操作处理进位,比如数位为。,说明该位及后面数位已处理好,直接返回数组。若遍历完都没返回,说明原数组全是。你可以假设除了整数 0 之外,这个整数不会以零开头。最高位数字存放在数组的首位, 数组中每个元素只存储。数组所表示的非负整数,在该数的基础上加一。的新数组返回,代表最高位进位后的结果。输入数组表示数字 4321。输入数组表示数字 123。输入数组表示数字 9。

2024-11-17 19:04:46 417

原创 买股票的最佳时机

在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。System.out.println("输入:" + Arrays.toString(prices));注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格;同时,你不能在买入前卖出股票。对于每个价格,计算当前价格与最小买入价格的差值,即当前可能的利润。在遍历过程中,不断更新最小买入价格。设计一个算法来计算你所能获取的最大利润。,初始值为正无穷大,另一个记录最大利润。

2024-11-10 19:36:49 504

原创 爬楼梯的方式

System.out.println("不同的爬楼方法数为:" + qing(n));,有两种爬法,可以一步爬两阶,也可以分两步每次爬一阶。你有多少种不同的方法可以爬到楼顶呢?的情况,考虑最后一步的爬法。1. 1 阶 + 1 阶 + 1 阶。,只有一种爬法,即一步爬一阶;阶楼梯只有两种可能,要么是从第。阶的不同爬法数就等于到达第。阶爬一步上来,要么是从第。有两种方法可以爬到楼顶。1. 1 阶 + 1 阶。有三种方法可以爬到楼顶。2. 1 阶 + 2 阶。3. 2 阶 + 1 阶。阶的爬法数加上到达第。

2024-11-10 19:10:04 419

原创 最后一个单词的长度

接着从这个位置向前继续遍历,找到最后一个单词的起始位置。只要当前字符不是空格,就继续向前移动指针,一旦遇到空格或者指针到达字符串的起始位置,就停止移动,此时标记的位置为。只要当前字符是空格,就继续向前移动指针,直到找到非空格字符或者指针到达字符串的起始位置。首先从字符串的末尾开始向前遍历,找到最后一个非空格字符的位置,这个位置标记为。,由若干单词组成,单词前后用一些空格字符隔开。最后一个单词是“World”,长度为 5。最后一个单词是“moon”,长度为 4。最后,计算最后一个单词的长度,即。

2024-11-03 15:48:44 283

原创 搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。System.out.println("输出" + result);,分别指向数组的第一个元素和最后一个元素的索引,进入循环,当。,继续在左半部分查找。当循环结束时,如果没有找到目标值,此时。指向的位置就是目标值应该插入的位置,将其作为结果输出。,说明目标值在数组的后半部分,将。,说明目标值在数组的前半部分,将。,表示找到了目标值,其索引为。,继续在右半部分查找。请必须使用时间复杂度为。

2024-11-03 15:04:34 909

原创 找出字符串中第一个匹配项的下标

这是因为如果从主字符串的某个位置开始的子串长度超过了主字符串剩余的长度,就不可能再找到子字符串了。用于在主字符串中查找子字符串的起始下标。进行比较,如果相等,说明找到了子字符串在主字符串中的起始位置,返回当前的下标。"leeto" 没有在 "leetcode" 中出现,所以返回 -1。字符串的第一个匹配项的下标(下标从 0 开始)。如果遍历完主字符串都没有找到子字符串,返回 -1。循环遍历主字符串,循环的起始位置是 0,结束条件是。第一个匹配项的下标是 0 ,所以返回 0。的类,其中包含一个方法。

2024-10-27 20:53:10 539

原创 移除数组元素

System.out.println("输出:k = " + k + ", nums = " + java.util.Arrays.toString(nums));为 0,这个变量将用于记录数组中与给定值不同的元素数量,同时也表示新数组中当前要放置元素的位置。首先从用户获取输入,包括数组的长度、数组的各个元素以及要移除的值。// 它以不等于 val 的值排序。你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。System.out.println("请输入数组的元素:");

2024-10-27 20:39:25 835

原创 合并两个有序链表

接受两个链表的头节点作为参数。如果其中一个链表为空,直接返回另一个链表。如果两个链表都不为空,比较两个链表当前节点的值。将值较小的节点作为合并后链表的一部分,并递归地调用方法处理下一个节点。如果合并后的链表为空,输出 “[]” 表示空链表。如果合并后的链表不为空,遍历链表并输出链表中的值,用方括号和逗号分隔。通过遍历整数列表,创建链表节点,构建链表数据结构。新链表是通过拼接给定的两个链表的所有节点组成的。提示用户输入两个链表的数字表示,以空格分隔的数字序列。将两个升序链表合并为一个新的。

2024-10-20 20:20:27 993

原创 有效的括号

创建一个空栈,用于存储左括号。对于字符串中的每个字符:如果是左括号,将其压入栈中。如果是右括号:检查栈是否为空。如果栈为空,说明没有对应的左括号,直接返回。如果栈不为空,弹出栈顶元素。然后检查弹出的元素是否与当前右括号匹配。System.out.print("请输入:");如果匹配,继续遍历下一个字符。,判断字符串是否有效。

2024-10-20 19:53:34 693

原创 java实现回文数

除以 10 去掉个位数字,继续下一次循环获取下一位数字。最后比较原始的整数和反转后的整数是否相等,如果相等则说明是回文数,返回。System.out.println(inputNumber + " 不是回文数。System.out.println(inputNumber + " 是回文数。System.out.print("请输入一个整数:");是指正序(从左向右)和倒序(从右向左)读都是一样的整数。首先判断输入的整数是否为负数,如果是负数则直接返回。,因为负数不可能是回文数。是一个回文整数,返回。

2024-10-13 12:41:40 633

原创 两数之和的下标

System.out.println("满足条件的两个数的下标为:" + result[0] + " " + result[1]);,说明之前已经遍历过一个元素与当前元素之和等于目标值。此时可以返回当前元素的下标。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。实现),用于存储已经遍历过的元素及其下标。和差值在哈希表中对应的下标。存入哈希表,继续遍历下一个元素。整数,并返回它们的数组下标。:对于当前遍历到的元素。

2024-10-13 12:15:34 529

原创 求整数段和

给定两个整数A和B,输出从A到B的所有整数以及这些数的和。

2024-08-11 13:03:57 352

原创 计算工资

某公司员工的工资计算方法如下:一周内工作时间不超过40小时,按正常工作时间计酬;超出40小时的工作时间部分,按正常工作时间报酬的1.5倍计酬。员工按进公司时间分为新职工和老职工,进公司不少于5年的员工为老职工,5年以下的为新职工。新职工的正常工资为30元/小时,老职工的正常工资为50元/小时。请按该计酬方式计算员工的工资。

2024-08-11 12:59:13 261

原创 12-24小时制

编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。

2024-08-04 13:15:40 1199

原创 逆序的三位数

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。每个测试是一个3位的正整数。输出按位逆序的数。输出样例:解题思路:首先使用 类读取用户输入的三位数,再使用 方法去除输入中可能存在的多余空格。最后创建 对象,使用其 方法来逆序排列输入的字符串形式的三位数,最后输出得到的逆序数具体代码:import java.util.Scanner;public class Main { publi

2024-08-04 13:01:19 587

原创 然后是几点

有时候人们用四位数字表示一个时间,比如1106表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为530;0 点 30 分表示为030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。

2024-07-28 17:06:22 305

原创 厘米换算英尺英寸

如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。

2024-07-28 16:58:38 385

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除