一些刷题小技巧
# 一些刷题小技巧
# 位运算
# 左移 <<1
表示 乘以 2,右移 >>1
表示除以 2
# 获取一个 int 类型整数每个位置上的 2 进制数位
ex:剑指 Offer II 067. 最大的异或 - 力扣(LeetCode) (leetcode-cn.com) (opens new window)
(下面代码为从高位向低位、从左往右)
for (int i = 31; i >= 0; i --) {
// 获取当前数位上的 2 进制数值
int bit = (num >> i) & 1;
......
}
# 从高位向低位(从左往右)计算两个整数的异或结果
ex:剑指 Offer II 067. 最大的异或 - 力扣(LeetCode) (leetcode-cn.com) (opens new window)
// 存储两数(`int nums1` 和 `int nums2`)的异或结果
int xor = 0;
for (int i = 31; i >= 0; i --) {
// 获取当前数位上的 2 进制数值
int bit1 = (num1 >> i) & 1;
int bit2 = (num2 >> i) & 1;
// 两数位不相等
if (bit1 != bit2) {
xor = xor * 2 + 1;
}
// 两数位相等
else {
xor = xor * 2;
}
}
return xor;
# 集合与数组
# List<String>
转 String[]
ex:剑指 Offer II 086. 分割回文子字符串 - 力扣(LeetCode) (opens new window)
// List<String> list
list.toArray(new String[list.size()]);
# List<String[]>
转 String[][]
ex:剑指 Offer II 086. 分割回文子字符串 - 力扣(LeetCode) (opens new window)
// List<String> list
list.toArray(new String[list.size()][]);
# String[]
转 List<String>
ex:剑指 Offer II 109. 开密码锁 - 力扣(LeetCode) (leetcode-cn.com) (opens new window)
// String[] str;
List<String> list = Arrays.asList(str);
# List<Integer>
转 int[]
// List<integer> list;
int[] arr = list.stream().mapToInt(Integer::intValue).toArray();
先转成 IntStream
,再转成 int[]
等同于:
// List<Integer> list;
IntStream intStream = list.stream().mapToInt(Integer::intValue);
int[] num = intStream.toArray();
如下面这样写会报错:
# Map 中添加元素
ex: 剑指 Offer II 113. 课程顺序 - 力扣(LeetCode) (leetcode-cn.com) (opens new window)
// Map<String, List<String>> map;
map.putIfAbsent("xxx", new ArrayList<>()); // 若 key 不存在,则添加 key
map.get("xxx").append("111"); // 为 key 对应的 value 赋值
// Map<String, Integer> map;
map.putIfAbsent("xxx", 0); // 若 key 不存在,则添加 key
map.put("xxx", map.get("xxx") + 1); // 将 key 对应的 value 值 + 1
# 计算数组的所有元素之和
ex:剑指 Offer II 101. 分割等和子集 - 力扣(LeetCode) (opens new window)
// int[] nums
int sum = Arrays.stream(nums).sum();
上次更新: 2022/06/13, 02:15:48