Acwing 2058. 笨拙的手指 java 位运算 进制转换

🤠 笨拙的牛蹄

import java.io.*;
import java.util.*;

public class Main
{
	static int get(char[] a, int b)// 将 b 进制数组组成的数 转换为 10 进制的数
	{
		int res = 0;
		for (int i = 0; i < a.length; i++)
		{
			res = res * b + a[i] - '0';
		}
		return res;
	}

	public static void main(String[] args) throws IOException
	{
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		String s2 = in.readLine();
		String s3 = in.readLine();
		// 存放可能的结果,两个序列都可能的结果就是真的结果
		HashSet<Integer> set = new HashSet<>();

		char[] a = s2.toCharArray();
		for (int i = 0; i < s2.length(); i++)
		{
			a[i] ^= 1;// 异或:转换第i位上的数字: 1->0; 0->1
			int d = get(a, 2);
			set.add(d);
			a[i] ^= 1;// 记得还原,重复利用
		}

		char[] b = s3.toCharArray();
		for (int i = 0; i < s3.length(); i++)
		{
			char t = b[i];
			for (int j = 0; j < 3; j++)
			{
				if (t - '0' != j)
				{
//					整型转成char: 加 '0' 再强转
					b[i] = (char) (j + '0');
					int k = get(b, 3);
//					第二次直接判重
					if (set.contains(k))
					{
						System.out.println(k);
						System.exit(0);
					}
				}
			}
			b[i] = t;//每个数位处理完之后复位
		}

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值