华为深圳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 四川

相关推荐

06-12 17:46
门头沟学院 Java
运营你豪哥:来说重点: ​1.项目前置,时间倒序。​​ 2.​项目描述强化结果与量化效果(STAR原则里的R)。​​ ​3.个人技能精炼,明确掌握程度,突出核心。​​ ​4.增加强有力开头的个人总结部分。​​ 5.​优化教育背景(成绩排名)、合并奖项与活动。​​
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
不要停下啊:大二打开牛客,你有机会开卷了,卷起来,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
评论
4
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务