虾皮一面

服了,又是一道没见过的算法,力扣都搜不到的那种,个人评估中等题可惜没撕出来。我简历也没啥算法经历为什么不给我出 HOT100 呢

题目是解布尔方程,一共五个符号,0、1、|、&、^,表达式忽略优先级从左往右计算。现在加入变量 X,X 赋值 1 或者 0,每个 X 值可以不同,求 X 组合使得表达式结果为0,输出一个即可。
例如
输入 1|0&X^1 输出 1
输入 X&X,输出 00(或 10 或 01,输出一个即可)

我复盘的答案如下
import java.util.*;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char[] s = sc.nextLine().toCharArray();
        boolean f0 = false, f1 = false;
        List<Integer> ans0 = new ArrayList<>();
        List<Integer> ans1 = new ArrayList<>();

        if (s[0] == '1') {
            f1 = true;
        } else if (s[0] == '0') {
            f0 = true;
        } else {
            f0 = f1 = true;
            ans0.add(0);
            ans1.add(1);
        }

        for (int i = 1; i < s.length; i += 2) {
            if (s[i] == '&') {
                if (s[i + 1] == '1') {
                    ;
                } else if (s[i + 1] == '0') {
                    f0 = true;
                    f1 = false;
                } else {
                    ans0.add(0);
                    ans1.add(1);
                }
            } else if (s[i] == '|') {
                if (s[i + 1] == '1') {
                    f0 = false;
                    f1 = true;
                } else if (s[i + 1] == '0') {
                    ;
                } else {
                    ans0.add(0);
                    ans1.add(1);
                }
            } else {
                if (s[i + 1] == '1') {
                    f0 = f1;
                    f1 = f0;
                    List<Integer> tmp = ans0;
                    ans0 = ans1;
                    ans1 = tmp;
                } else if (s[i + 1] == '0') {
                    f0 = f1;
                    f1 = f0;
                    List<Integer> tmp = ans0;
                    ans0 = ans1;
                    ans1 = tmp;
                } else {
                    if (f0) {
                        ans0.add(0);
                        ans1.add(1);
                    } else {
                        ans0.add(1);
                        ans1.add(0);
                    }
                }
            }
        }

        if (f0) {
            for (int i = 0; i < ans0.size(); i++) {
                System.out.print(ans0.get(i));
            }
        } else {
            System.out.println("NO ANSWER");
        }

        sc.close();
    }
}
全部评论

相关推荐

评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务