<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[dknna的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/dknna</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; dknna]]></copyright><item><title><![CDATA[字符串相乘]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/146298790</link><guid>https://blog.youkuaiyun.com/dknna/article/details/146298790</guid><author>dknna</author><pubDate>Sun, 16 Mar 2025 18:21:17 +0800</pubDate><description><![CDATA[给定两个以字符串形式表示的非负整数num1和num2，返回num1和num2的乘积，它们的乘积也表示为字符串形式。不能使用任何内置的 BigInteger 库或直接将输入转换为整数。"6""56088"解题思路·：本题要求计算两个以字符串形式表示的非负整数num1和num2的乘积，并且不允许使用内置的BigInteger库，也不能直接将输入的字符串转换为整数。我们可以模拟手工乘法的过程来解决这个问题，即将一个数的每一位与另一个数的每一位相乘，然后将结果累加起来。如果num1或者num2为"0"]]></description><category></category></item><item><title><![CDATA[不同路径——2]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/146298513</link><guid>https://blog.youkuaiyun.com/dknna/article/details/146298513</guid><author>dknna</author><pubDate>Sun, 16 Mar 2025 18:08:28 +0800</pubDate><description><![CDATA[System.out.println("从左上角到右下角的不同路径数量为: " + result);移动过来，所以到达该位置的不同路径数量等于到达上方位置的路径数量加上到达左方位置的路径数量，即。System.out.println("输入的网格为空，请重新输入。的不同路径数量，且机器人每次只能向下或向右移动一步，移动路径中不能包含障碍物。// 如果起点是障碍物，无法移动，路径数为 0。1. 向右 -> 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右 -> 向右。]]></description><category></category></item><item><title><![CDATA[不同路径——1]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/146298410</link><guid>https://blog.youkuaiyun.com/dknna/article/details/146298410</guid><author>dknna</author><pubDate>Sun, 16 Mar 2025 17:55:17 +0800</pubDate><description><![CDATA[/ 状态转移方程：到达当前位置 (i, j) 的路径数等于到达上方位置 (i - 1, j) 的路径数加上到达左方位置 (i, j - 1) 的路径数。// 初始化第一列，因为从左上角只能一直向下走到达第一列的每个位置，所以路径数都为 1。），因为机器人只能从左上角一直向下移动才能到达这些位置，所以到达这些位置的路径也只有一种，即。），因为机器人只能从左上角一直向右移动才能到达这些位置，所以到达这些位置的路径只有一种，即。的不同路径数量与到达其上方和左方位置的不同路径数量有关，设。]]></description><category></category></item><item><title><![CDATA[小偷之打家劫舍]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/145370257</link><guid>https://blog.youkuaiyun.com/dknna/article/details/145370257</guid><author>dknna</author><pubDate>Sun, 26 Jan 2025 17:39:22 +0800</pubDate><description><![CDATA[dp[i]]]></description><category></category></item><item><title><![CDATA[在排序数组中查找元素的第一个和最后一个位置]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/145370026</link><guid>https://blog.youkuaiyun.com/dknna/article/details/145370026</guid><author>dknna</author><pubDate>Sun, 26 Jan 2025 17:29:58 +0800</pubDate><description><![CDATA[给你一个按照非递减顺序排列的整数数组nums，和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target，返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。nums = [[3,4]nums = [[-1,-1][-1,-1]解题思路：为了满足时间复杂度 的要求，我们可以使用二分查找算法。二分查找的基本思想是每次将搜索区间缩小一半，从而快速定位目标元素。]]></description><category></category></item><item><title><![CDATA[整数转罗马数字]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/145369907</link><guid>https://blog.youkuaiyun.com/dknna/article/details/145369907</guid><author>dknna</author><pubDate>Sun, 26 Jan 2025 17:13:17 +0800</pubDate><description><![CDATA[使用一个循环来不断从输入的整数中减去最大可能的罗马数字对应的值，并将相应的符号添加到结果字符串中，直到整数减为 0。，表示当当前的整数大于或等于当前罗马数字对应的值时，将对应的符号添加到结果中，并从整数中减去该值。System.out.println("对应的罗马数字是: " + romanNumber);System.out.print("请输入一个大于 0 的整数: ");3000 = MMM 由于 1000 (M) + 1000 (M) + 1000 (M)加 1，尝试下一个较小的罗马数字对应的值。]]></description><category></category></item><item><title><![CDATA[平衡二叉树]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/144490372</link><guid>https://blog.youkuaiyun.com/dknna/article/details/144490372</guid><author>dknna</author><pubDate>Sun, 15 Dec 2024 18:48:46 +0800</pubDate><description><![CDATA[，创建好新的非空子节点后将其加入队列，以便后续继续处理它们的子节点，如此循环，直到队列为空或者数组元素已全部处理完，最终完成二叉树的构建。对于任意一个节点，先判断其是否为。然后递归地调用该方法分别计算其左子树高度和右子树高度，在得到左右子树高度后，检查当前节点的左右子树高度差，如果高度差绝对值大于。），每次从队列中取出一个节点（代表当前正在构建子树的父节点），按顺序为其设置左子节点和右子节点（如果数组对应位置元素不为。// 计算二叉树节点的高度，同时在计算过程中判断子树是否平衡，优化后的方法。]]></description><category></category></item><item><title><![CDATA[将有序数组转换为二叉搜索树]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/144489734</link><guid>https://blog.youkuaiyun.com/dknna/article/details/144489734</guid><author>dknna</author><pubDate>Sun, 15 Dec 2024 18:00:44 +0800</pubDate><description><![CDATA[随着递归不断深入和回溯，每一层的子树构建完成后都会返回其对应的根节点，最终整个树的根节点以及完整的树结构就构建好了。从最顶层来看，一开始构建的根节点以及其左右子树整合起来就是一棵完整的平衡二叉搜索树。以刚才选取的根节点为界，其左侧的元素可以用来构建左子树。同理，根节点右侧的元素用于构建右子树，右子树中的所有节点值都要大于根节点值。同样递归调用构建树的方法，传入右子树对应的数组范围（索引范围从。），继续按照同样的规则选取中间元素作为子树的根节点，不断重复这个过程，直到子树对应的数组范围为空（也就是。]]></description><category></category></item><item><title><![CDATA[二叉树的最大深度]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/144329282</link><guid>https://blog.youkuaiyun.com/dknna/article/details/144329282</guid><author>dknna</author><pubDate>Sun, 08 Dec 2024 18:47:48 +0800</pubDate><description><![CDATA[否则用首个值创建根节点入队列，从第二个值开始循环，每次取队列节点，按顺序依值构建左右子树节点（非 “null” 时创建并加入队列），最后返回根节点完成树构建。System.out.println("请按层序遍历顺序输入二叉树节点值（使用null表示空节点），节点值之间用空格隔开，输入完成后按回车键：");：先看根节点，为空则树对称返回 true，不为空就调 isMirror 方法判断左右子树是否镜像对称。// 整棵树的深度 = 左右子树深度较大值 + 1（根节点这一层）// 计算二叉树最大深度的方法。]]></description><category></category></item><item><title><![CDATA[对称二叉树]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/144329075</link><guid>https://blog.youkuaiyun.com/dknna/article/details/144329075</guid><author>dknna</author><pubDate>Sun, 08 Dec 2024 18:27:12 +0800</pubDate><description><![CDATA[从输入数组的第二个值开始（用索引标记位置），每次从队列拿出一个节点（当作父节点），按顺序看对应的值能不能构建左子树节点、右子树节点，如果能构建就创建新节点加到队列里，不断循环这个过程，直到把所有输入值对应的节点都构建好，最后返回根节点，这样二叉树就构建完成了。要是左右子树有一个为空，另一个不为空，那就不对称，返回 false。相等的话，就接着递归地去判断左子树的左子树和右子树的右子树是不是对称，以及左子树的右子树和右子树的左子树是不是对称，这两个小判断都为 true，整体才是对称的，返回 true。]]></description><category></category></item><item><title><![CDATA[相同的二叉树]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/144173203</link><guid>https://blog.youkuaiyun.com/dknna/article/details/144173203</guid><author>dknna</author><pubDate>Sun, 01 Dec 2024 19:03:32 +0800</pubDate><description><![CDATA[先处理输入为空的边界情况，返回空树。然后从输入首元素创建根节点并入队列，按层序遍历顺序，依输入内容为节点构建左、右子树（非 “#” 表示有节点，创建并关联后入队列），最终返回根节点。System.out.println("请按照层序遍历顺序输入第二棵二叉树节点值（用空格隔开，空节点用#表示）：");// 如果两棵树当前节点都为空，说明同步遍历到了叶子节点的下一层，认为相同。// 如果其中一棵为空，另一棵不为空，结构不同，返回False。如果两个树在结构上相同，并且节点具有相同的值，则认为它们是相同的。]]></description><category></category></item><item><title><![CDATA[二叉树的中序遍历]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/144173065</link><guid>https://blog.youkuaiyun.com/dknna/article/details/144173065</guid><author>dknna</author><pubDate>Sun, 01 Dec 2024 18:54:50 +0800</pubDate><description><![CDATA[然后利用队列循环处理，每次取出队首节点，按输入顺序为其构建左、右子树（非 “#” 表示有节点，创建并关联后入队列），直至队空或处理完输入，最终返回根节点。System.out.println("请按照层序遍历顺序输入二叉树节点值（用空格隔开，空节点用#表示）：");：递归遍历，先处理左子树，再把当前节点值加入结果列表，最后处理右子树，以此实现中序遍历逻辑。// 将当前节点的值加入结果列表。方法开启遍历，最后返回结果列表/2、inorder。// 递归遍历左子树。// 递归遍历右子树。：创建结果列表，调用。]]></description><category></category></item><item><title><![CDATA[合并两个有序数组]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/144013306</link><guid>https://blog.youkuaiyun.com/dknna/article/details/144013306</guid><author>dknna</author><pubDate>Sun, 24 Nov 2024 20:56:19 +0800</pubDate><description><![CDATA[int[] nums1Valid = getArrayFromInput("请按非递减顺序输入nums1数组的有效元素：", m);int[] nums2 = getArrayFromInput("请按非递减顺序输入nums2数组的元素：", n);System.out.println("请输入nums1数组的有效元素个数：");System.out.println("请输入nums2数组的有效元素个数：");System.out.println("输入不合法，请输入整数！// 清除输入缓冲区的无效内容。]]></description><category></category></item><item><title><![CDATA[删除排序链表中的重复元素]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/144013077</link><guid>https://blog.youkuaiyun.com/dknna/article/details/144013077</guid><author>dknna</author><pubDate>Sun, 24 Nov 2024 20:45:24 +0800</pubDate><description><![CDATA[用指针遍历链表，若当前节点值与下一节点值相等，跳过重复节点（调整指针指向）；若不等，指针后移，直至遍历完链表，返回处理后的头节点。从链表头开始，用指针依次访问每个节点，输出节点值并添加空格分隔，直到指针指向。（空链表），否则将首元素转为整数创建头节点，再循环遍历数组剩余元素，依次创建新节点并连接到链表上，最后返回头节点。System.out.println("请输入链表元素：");获取用户输入的以空格分隔的链表元素字符串，分割成字符串数组。// 创建链表的方法。// 打印链表的方法。// 定义链表节点类。]]></description><category></category></item><item><title><![CDATA[二进制求和]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/143836582</link><guid>https://blog.youkuaiyun.com/dknna/article/details/143836582</guid><author>dknna</author><pubDate>Sun, 17 Nov 2024 19:09:40 +0800</pubDate><description><![CDATA[只要两数有位没处理或有进位就循环，先将进位赋给和值，再分别累加两数对应位数字，把和值取余 2 的结果插入结果字符串开头作为当前位结果，和值除以 2 得到新进位。循环结束后，将构建好的结果字符串返回，就是两二进制数相加的结果。System.out.println("请输入a：");System.out.println("请输入b：");首先获取两个二进制字符串末尾索引，设进位为 0，用。，以二进制字符串的形式返回它们的和。给你两个二进制字符串。]]></description><category></category></item><item><title><![CDATA[数组元素加1]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/143836506</link><guid>https://blog.youkuaiyun.com/dknna/article/details/143836506</guid><author>dknna</author><pubDate>Sun, 17 Nov 2024 19:04:46 +0800</pubDate><description><![CDATA[System.out.println("请输入表示整数的数字数组，元素之间用空格隔开：");循环从数组末尾开始倒序遍历。先给当前数位加一，再用取余操作处理进位，比如数位为。，说明该位及后面数位已处理好，直接返回数组。若遍历完都没返回，说明原数组全是。你可以假设除了整数 0 之外，这个整数不会以零开头。最高位数字存放在数组的首位， 数组中每个元素只存储。数组所表示的非负整数，在该数的基础上加一。的新数组返回，代表最高位进位后的结果。输入数组表示数字 4321。输入数组表示数字 123。输入数组表示数字 9。]]></description><category></category></item><item><title><![CDATA[买股票的最佳时机]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/143664842</link><guid>https://blog.youkuaiyun.com/dknna/article/details/143664842</guid><author>dknna</author><pubDate>Sun, 10 Nov 2024 19:36:49 +0800</pubDate><description><![CDATA[在第 2 天（股票价格 = 1）的时候买入，在第 5 天（股票价格 = 6）的时候卖出，最大利润 = 6-1 = 5。System.out.println("输入：" + Arrays.toString(prices));注意利润不能是 7-1 = 6, 因为卖出价格需要大于买入价格；同时，你不能在买入前卖出股票。对于每个价格，计算当前价格与最小买入价格的差值，即当前可能的利润。在遍历过程中，不断更新最小买入价格。设计一个算法来计算你所能获取的最大利润。，初始值为正无穷大，另一个记录最大利润。]]></description><category></category></item><item><title><![CDATA[爬楼梯的方式]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/143664747</link><guid>https://blog.youkuaiyun.com/dknna/article/details/143664747</guid><author>dknna</author><pubDate>Sun, 10 Nov 2024 19:10:04 +0800</pubDate><description><![CDATA[System.out.println("不同的爬楼方法数为：" + qing(n));，有两种爬法，可以一步爬两阶，也可以分两步每次爬一阶。你有多少种不同的方法可以爬到楼顶呢？的情况，考虑最后一步的爬法。1. 1 阶 + 1 阶 + 1 阶。，只有一种爬法，即一步爬一阶；阶楼梯只有两种可能，要么是从第。阶的不同爬法数就等于到达第。阶爬一步上来，要么是从第。有两种方法可以爬到楼顶。1. 1 阶 + 1 阶。有三种方法可以爬到楼顶。2. 1 阶 + 2 阶。3. 2 阶 + 1 阶。阶的爬法数加上到达第。]]></description><category></category></item><item><title><![CDATA[最后一个单词的长度]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/143465667</link><guid>https://blog.youkuaiyun.com/dknna/article/details/143465667</guid><author>dknna</author><pubDate>Sun, 03 Nov 2024 15:48:44 +0800</pubDate><description><![CDATA[接着从这个位置向前继续遍历，找到最后一个单词的起始位置。只要当前字符不是空格，就继续向前移动指针，一旦遇到空格或者指针到达字符串的起始位置，就停止移动，此时标记的位置为。只要当前字符是空格，就继续向前移动指针，直到找到非空格字符或者指针到达字符串的起始位置。首先从字符串的末尾开始向前遍历，找到最后一个非空格字符的位置，这个位置标记为。，由若干单词组成，单词前后用一些空格字符隔开。最后一个单词是“World”，长度为 5。最后一个单词是“moon”，长度为 4。最后，计算最后一个单词的长度，即。]]></description><category></category></item><item><title><![CDATA[搜索插入位置]]></title><link>https://blog.youkuaiyun.com/dknna/article/details/143465457</link><guid>https://blog.youkuaiyun.com/dknna/article/details/143465457</guid><author>dknna</author><pubDate>Sun, 03 Nov 2024 15:04:34 +0800</pubDate><description><![CDATA[给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。System.out.println("输出" + result);，分别指向数组的第一个元素和最后一个元素的索引，进入循环，当。，继续在左半部分查找。当循环结束时，如果没有找到目标值，此时。指向的位置就是目标值应该插入的位置，将其作为结果输出。，说明目标值在数组的后半部分，将。，说明目标值在数组的前半部分，将。，表示找到了目标值，其索引为。，继续在右半部分查找。请必须使用时间复杂度为。]]></description><category></category></item></channel></rss>