该文章介绍了如何解决NowCoder上的NC31题“第一个只出现一次的字符”。题目要求在给定的字符串中找到第一个只出现一次的字符,并返回其位置,若不存在则返回-1。文章提供了一种使用HashMap实现的解决方案,该方案首先遍历字符串,统计每个字符出现的次数,然后再次遍历字符串,查找第一个出现次数为1的字符。该方案满足题目要求的时间复杂度O(n)和空间复杂度O(n)。文章还提供了Java代码示例和两个测试用例,分别输入“google”和“aa”来演示该算法的正确性。

该文章介绍了NowCoder编程题NC217“给表达式添加运算符”的解题思路与代码实现。题目要求给定一个仅包含数字的字符串和一个目标值,在数字之间添加“+”、“-”、“*”运算符,使得表达式结果等于目标值,并返回所有满足条件的表达式。 文章提供了一个基于回溯法的Java解决方案,通过递归的方式枚举所有可能的运算符组合和数字截取方式。核心在于`backtrack`函数,它遍历字符串,尝试不同的运算符,并更新表达式结果,最终找到所有符合目标值的表达式。代码中处理了前导零的情况,并优化了乘法运算的计算方式。

本文介绍了“只出现一次的数字(二)”题目:在整数数组中唯一出现一次的数其余均出现三次,需在 O(n) 时间、O(1) 额外空间内找出该数。解法利用位计数思想,遍历数组统计每个位上 1 的出现次数,取模 3 后恢复唯一数的二进制表示,最终得到结果。代码实现基于 Java,使用长度为 32 的计数数组完成位累加与重构。

该文章介绍了如何使用之字形顺序打印二叉树。核心在于通过层序遍历二叉树,并根据层数奇偶性决定每一层的打印顺序:奇数层从左向右,偶数层从右向左。 实现方法使用队列进行层序遍历,记录每一层的节点值到一个列表中。通过一个布尔变量`flag`控制是否反转当前层的列表,从而实现之字形打印。 示例中,对于二叉树{1,2,3,#,#,4,5},输出为[[1],[3,2],[4,5]];对于{8,6,10,5,7,9,11},输出为[[8],[10,6],[5,7,9,11]]。该算法时间复杂度为O(n),空间复杂度为O(n)。

该题要求对给定字符串进行变形处理:先将字符串按空格分割成单词,然后反转单词的顺序,并对每个单词中的字符进行大小写反转。例如,"Hello World" 变形后变为 "wORLD hELLO"。 提供的Java代码实现通过 `split(" ", -1)` 分割字符串,然后从右向左遍历单词数组,对每个单词调用 `reverse()` 函数进行大小写反转,并将结果按顺序添加到 `StringBuilder` 中,最终返回变形后的字符串。`reverse()` 函数遍历单词的每个字符,使用 `Character.isUpperCase()` 和 `Character.toLowerCase()/toUpperCase()` 实现大小写互换。 代码保证了时间复杂度为 O(n),空间复杂度为 O(n)。

本文要求实现大数乘法:以字符串形式读取两个非负整数(0≤n≤10^1000),返回它们的乘积字符串。空间复杂度 O(n),时间复杂度 O(n²)。示例展示了普通乘法和零乘的情况。给出参考实现,直接利用 Java 的 BigInteger 类将字符串转换为大整数相乘,再转回字符串返回。