0
点赞
收藏
分享

微信扫一扫

【算法萌新闯力扣】:找到所有数组中消失对数字

灵魂跑者 2023-11-18 阅读 39

目录

338比特位计数

题目要求:

解题思路:

1、暴力穷举

代码:

2、N&(N - 1)公式求解

代码:

3、奇偶数性质解法:

代码:

20有效的括号

题目要求:

解题思路

代码:

415字符串相加

题目要求

解题思路

代码:


338比特位计数

题目要求:

解题思路:

1、暴力穷举

遍历一遍 1 到 n,把里面的元素按位与上一个1,如果等于1,则说明当前i的末尾是1,用计数器记录下来,不是则不记录下来,然后再右移1位,如图:

代码:

2、N&(N - 1)公式求解

如图:

代码:

public int[] countBits(int n) {
        int[] array = new int[n + 1];
        array[0] = 0;
        for(int i = 1; i < array.length; i++) {
            array[i] = array[i & (i-1)] + 1;
        }
        return array;
    }

3、奇偶数性质解法:

如图:

代码:

public int[] countBits(int n) {
        int[] arr = new int[n + 1];
        arr[0] = 0;
        for(int i = 1; i < arr.length; i++) {
            arr[i] = (i & 1) == 1 ? arr[i - 1] + 1 : arr[i >> 1];
        }
        return arr;
    }

20有效的括号

题目要求:

解题思路

代码:

public boolean isValid(String s) {
        Stack<Character> stack = new Stack<>();
        for(char x : s.toCharArray()) {
            if(x == '(') {
                stack.push(')');
            } else if(x == '[') {
                stack.push(']');
            } else if(x == '{') {
                stack.push('}');
            } else if(stack.empty() || stack.pop() != x) {
                return false;
            }
        }
        return stack.empty();
    }

415字符串相加

题目要求

解题思路

代码:

public String addStrings(String num1, String num2) {
        StringBuilder sb = new StringBuilder();
        //记录进位的变量
        int carry = 0;
        //记录字符串的下标
        int n1 = num1.length() - 1;
        int n2 = num2.length() - 1;
        for(; n1 >= 0 || n2 >= 0 || carry != 0; n1--, n2--) {
            int c1 = (n1 < 0) ? 0 : (num1.charAt(n1) - '0');
            int c2 = (n2 < 0) ? 0 : (num2.charAt(n2) - '0');
            sb.append((c1 + c2 + carry) % 10);
            carry = (c1 + c2 + carry) / 10;
        }
        //翻转字符串
        return sb.reverse().toString();
    }
举报

相关推荐

0 条评论