List<List<Integer>> ans = newArrayList<>(); intm= nums1.length; intn= nums2.length; for (inti=0; i < Math.min(m, k); i++) { heap.offer(newint[]{i, 0}); } while (k-- > 0 && !heap.isEmpty()) { int[] indexPair = heap.poll(); List<Integer> list = newArrayList<>(); list.add(nums1[indexPair[0]]); list.add(nums2[indexPair[1]]); ans.add(list); if (indexPair[1] + 1 < n) { heap.offer(newint[]{indexPair[0], indexPair[1] + 1}); } } return ans; } }
lc67. 二进制求和(EZ)
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
示例 1:
输入:a = "11", b = "1" 输出:"100"
示例 2:
输入:a = "1010", b = "1011" 输出:"10101"
提示:
1 <= a.length, b.length <= 10^4
a 和 b 仅由字符 '0' 或 '1' 组成
字符串如果不是 "0" ,就不含前导零
模拟法,两个字符串从后往前倒推,然后把字符转换成对应的数字再相加,最后去余数
classSolution { public String addBinary(String a, String b) { StringBufferans=newStringBuffer(); intn= Math.max(a.length(), b.length()), carry = 0; for (inti=0; i < n; i++) { carry += i < a.length() ? (a.charAt(a.length() - i - 1) - '0') : 0; carry += i < b.length() ? (b.charAt(b.length() - i - 1) - '0') : 0; ans.append((char)(carry % 2 + '0')); carry /= 2; } if (carry > 0) { ans.append('1'); } ans.reverse(); return ans.toString(); } }
如果是用python的话,有更简单的做法,可以直接上位运算
classSolution: defaddBinary(self, a, b) -> str: x, y = int(a, 2), int(b, 2) while y: ans = x ^ y carry = (x & y) << 1 x, y = ans, carry returnbin(x)[2:]