0
点赞
收藏
分享

微信扫一扫

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

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

目录

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 ? 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 条评论