二进制求和
给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。
示例 1:
输入:a = "11", b = "1"
输出:"100"
import java.math.BigInteger;
class Solution {
public String addBinary(String a, String b) {
// // 将二进制字符串a,b转化为十进制
// int x = Integer.parseInt(a, 2);
// int y = Integer.parseInt(b, 2);
// // 将求和后的值转化为二进制,返回输出
// String n = Integer.toString(x+y,2);
// return n;
BigInteger x = new BigInteger(a,2);
BigInteger y = new BigInteger(b,2);
BigInteger z = new BigInteger("0",2);
BigInteger addWithoutCarry,carry;
while(y.compareTo(z) != 0){
// xor操作得到两个数字无进位的相加结果
addWithoutCarry = x.xor(y);
// and操作后左移1位操作得到进位carry二进制结果
carry = x.and(y).shiftLeft(1);
x = addWithoutCarry;
y = carry;
}
return x.toString(2);
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/fdf187b4b0eadccb538e837720fe98f0.png)
极大极小游戏
给你一个下标从 0 开始的整数数组 nums ,其长度是 2 的幂。对 nums 执行下述算法:
设 n 等于 nums 的长度,如果 n == 1 ,终止 算法过程。否则,创建 一个新的整数数组 newNums ,新数组长度为 n / 2 ,下标从 0 开始。
对于满足 0 <= i < n / 2 的每个 偶数 下标 i ,将 newNums[i] 赋值 为 min(nums[2 * i], nums[2 * i + 1]) 。
对于满足 0 <= i < n / 2 的每个 奇数 下标 i ,将 newNums[i] 赋值 为 max(nums[2 * i], nums[2 * i + 1]) 。
用 newNums 替换 nums 。
从步骤 1 开始 重复 整个过程。
执行算法后,返回 nums 中剩下的那个数字。
class Solution {
public int minMaxGame(int[] nums) {
int n = nums.length;
// 判断数组长度为1时,终止算法
if(n == 1){
return nums[0];
}
int[] newNums = new int[n/2];
for(int i = 0; i < n/2; i++){
// 判断下标i的奇偶
if((i & 1) == 0){
newNums[i] = Math.min(nums[2 * i], nums[2 * i + 1]);
} else {
newNums[i] = Math.max(nums[2 * i], nums[2 * i + 1]);
}
}
return minMaxGame(newNums);
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/d2e003d6d290a96e737c0f49a6765def.png)
星期计算
填空题:已知今天是星期六,请问 20的22次幂天后是星期几?注意用数字 1 到 7 表示星期一到星期日。
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
// Math.pow(底数x,指数y)
System.out.println((int)Math.pow(20,22)%7 + 6);
scan.close();
}
}
![](https://i-blog.csdnimg.cn/blog_migrate/d4ebf2c27a7dd6719a44efc96e11d87d.png)