华为深圳OD,一面,面试官崔某某,
华为深圳OK,面试官崔某某, 手撕代码 1.'(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。
public boolean checkVal(String s) {
Stack<Character> st = new Stack<>();
char[] chars = s.toCharArray();
for (char ch : chars) {
if (ch == '(' || ch == '{' || ch == '[') {
st.push(ch);
} else {
if (st.size() > 0
&& ch == ')' && st.peek() == '('
|| ch == '}' && st.peek() == '{'
|| ch == ']' && st.peek() == '[') {
st.pop();
} else {
return false;
}
}
}
return st.empty();
}
2.* 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和并同样以字符串形式返回。 * 你不能使用任何內建的用于处理大整数的库(比如 BigInteger), 也不能直接将输入的字符串转换为整数形式。 * 示例 1: * 输入:num1 = "11", num2 = "123" * 输出:"134" * 示例 2: * 输入:num1 = "456", num2 = "77" * 输出:"533" * 示例 3: * 输入:num1 = "0", num2 = "0" * 输出:"0" * 提示: * 1 <= num1.length, num2.length <= 104 * num1 和num2 都只包含数字 0-9 * num1 和num2 都不包含任何前导零
public String add(String s1, String s2) {
return s1.length() > s2.length() ? addOpt(s1, s2) : addOpt(s2, s1);
}
private String addOpt(String s1, String s2) {
//s1的长度肯定是大于s2的长度的
char[] cs1 = s1.toCharArray();
char[] cs2 = s2.toCharArray();
int add = 0;
StringBuilder res = new StringBuilder();
for (int i = 0; i < cs1.length; i++) {
int sum = 0;
if (i < s2.length()) {
char c1 = cs1[cs1.length - 1 - i];
char c2 = cs2[cs2.length - 1 - i];
sum = c1 - '0' + c2 - '0';
} else {
char c1 = cs1[cs1.length - 1 - i];
sum = c1 - '0';
}
if (sum + add >= 10) {
res.append((sum + add) % 10);
add = (sum + add) / 10;
} else {
res.append(sum + add);
add = (sum + add) / 10;
}
}
if (add > 0) {
res.append(add);
}
return res.reverse().toString();
}
今天重写一次
public String add(String a1, String a2) {
//12345
//123
char[] cs1 = a1.toCharArray();
char[] cs2 = a2.toCharArray();
//当前位置上的数为
int l = Math.max(cs1.length, cs2.length);
StringBuilder sb = new StringBuilder();
int jw = 0;
for (int i = 0; i < l; i++) {
int cur = jw;
if (i < cs1.length) {
cur += cs1[cs1.length - 1 - i] - '0';
}
if (i < cs2.length) {
cur += cs2[cs2.length - 1 - i] - '0';
}
sb.append(cur % 10);
jw = cur / 10;
}
if (jw > 0) {
sb.append(jw);
}
return sb.reverse().toString();
}
```