Java 题解 | #牛群的编码II#
牛群的编码II
https://www.nowcoder.com/practice/ed764a3284744317a787ea8218eea880
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param a string字符串
* @param b string字符串
* @return string字符串
*/
public String subtractTernary (String a, String b) {
// write code here
StringBuilder res = new StringBuilder();
int borrow = 0, i = a.length() - 1, j = b.length() - 1;
while (i >= 0 || j >= 0 || borrow > 0) {
int diff = (i >= 0 ? a.charAt(i--) - '0' : 0) - (j >= 0 ? b.charAt(
j--) - '0' : 0) - borrow;
if (diff < 0) {
diff += 3;
borrow = 1;
} else {
borrow = 0;
}
res.append(diff);
}
return res.reverse().toString();
}
}
编程语言是 Java。
该题考察的主要知识点包括:
- 字符串操作
- 循环遍历
- 条件判断
以下是代码的解释:
- subtractTernary 方法接受两个字符串参数 a 和 b,表示两个三进制数。
- 创建一个 StringBuilder 对象 res 用于存储结果。
- 创建一个整数变量 borrow,用于表示借位。
- 使用两个指针 i 和 j 分别指向字符串 a 和 b 的最低位(个位)。
- 使用一个循环遍历,循环的条件是 i 或 j 仍有未处理的位,或者还有借位。
- 在循环中,首先计算当前位的差值 diff。如果 i 仍有未处理的位,则从字符串 a 中获取当前位的值,否则为 0;同样地,如果 j 仍有未处理的位,则从字符串 b 中获取当前位的值,否则为 0。
- 根据差值 diff 和借位情况,更新差值和借位。如果差值小于 0,则加上 3 并设置借位为 1,否则不需要借位。
- 将差值 diff 添加到 res 中。
- 循环结束后,将 res 反转并转换为字符串,即为最终的结果。
查看9道真题和解析