虾皮一面

服了,又是一道没见过的算法,力扣都搜不到的那种,个人评估中等题可惜没撕出来。我简历也没啥算法经历为什么不给我出 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();
    }
}
全部评论

相关推荐

Sigma777:我感觉日常是可遇不可求,不能拿历史经验来套,可能今年10月有岗,明年10月同一时间就没有了,没人能给你个准,日常难的是蹲点不是面试,蹲到了第一个投立马约面快速入职,你可以9月底多去几家自己心仪的公司官网天天蹲点,看岗位的更新时间,如果放出来在1周之内一般是还有hc的就立马投,多找几个备胎可能性较大,当然还是那句话,可遇不可求
点赞 评论 收藏
分享
头像
昨天 14:03
已编辑
门头沟学院 Java
最近看到很多优秀的同学开始在牛客上用意向书打牌了,真是的羡慕死了。这些大佬什么时候才能释放一些Offer呢?这次秋招真的是感受到了大厂实习的重要性,希望学习学妹们一定重视大厂实习,尽量秋招之前去大厂混个实习经历。本人学历还算中等,本2硕9。本2学校不出名,很多外省的人都没听到过。硕士的学校还挺好的,是网上风评很好的一个学校。9月12日更新本人没有大厂实习的经历,只有一段银行的实习经历和一段国企的实习经历。目前本人的秋招战绩如下:1.快手-秋招提前批简历挂,秋招正式批简历挂2.拼多多-秋招提前批简历挂,秋招正式批简历挂3.蚂蚁-秋招正式批简历挂4.淘天-秋招正式批简历挂5.米哈游-秋招正式批简历挂6.滴滴-秋招提前批简历挂7.小红书-二面之后挂8.美团-第一轮二面之后挂,被重新捞起来了。第二轮一面的时候面试官说没有大厂实习经历,希望能提前来实习9.腾讯-HR面之后挂10.字节-HR面之后挂(HR说经历可能不如别人优秀,排序排不过。当初最开始约面的时候,HR打电话就问我的基本情况,第一个问题就问的有没有在大厂做过高并发项目,唉,没大厂实习真是心累)11.小鹏汽车-HR面之后等了一个1个月挂掉了12.虾皮-HR面之后等了一个月了,目前还没消息13.京东-HR面之后两周了,目前还没消息14.中兴-三面之后排序挂每次HR面都会被HR问到类似的问题:1.&quot;我看同学都是一些小企业、国企的实习经历,为什么会选择秋招投递互联网大厂?&quot;2.&quot;互联网大厂的工作压力很大,同学没有过相关的经历,能适应吗?&quot;3.&quot;我们公司软件系统承载的QPS都是非常高的,我看同学没有高并发系统的开发经历,同学觉得自己能胜任这个工作吗?&quot;目前大厂的实习经历真的很重要,学弟学妹们多多准备吧,不要像我一样
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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