华为深圳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();
    }
    ```

全部评论
第一题和我一样
4 回复 分享
发布于 2022-10-25 15:04 陕西
虽然写出来了,这代码是真的,现在看有点弱鸡。
点赞 回复 分享
发布于 2023-07-26 17:29 四川

相关推荐

4 3 评论
分享
牛客网
牛客企业服务