原题链接

题目描述

Given 3 positives numbers a, b and c. Return the minimum flips required in some bits of a and b to make ( a OR b == c ). (bitwise OR operation).
Flip operation consists of change any single bit 1 to 0 or change the bit 0 to 1 in their binary representation.

修改a或者b的二进制表示,使得a or b = c

解题思路

尝试做了一场leetcode的周赛题目,这是第二题(直接倒在了第三题),题目不难,我的思路也非常常规,就是把三个数的二进制值都get到然后进行比较,一个小坑是三个数的二进制表示长度可能不一,要提前处理(由于题目约束里说了三个数都是正数,所以在前面加0就可以)
code:

class Solution {public int minFlips(int a, int b, int c) {String C = Integer.toBinaryString(c);String A = Integer.toBinaryString(a);String B = Integer.toBinaryString(b);int flip = 0;String[] addtmp = addZero(A, B, C);char[] binaryA = addtmp[0].toCharArray();char[] binaryB = addtmp[1].toCharArray();char[] binaryC = addtmp[2].toCharArray();   for (int i = binaryC.length - 1; i >= 0; i--) {char tmp = binaryC[i];char tmpA = binaryA[i];char tmpB = binaryB[i];//if tmp == 1, requires one or two '1' in A and B//if tmp == 0, requires both 0 in A and Bif (tmp == '1') {if (tmpA == '0' && tmpB == '0') {flip++;}}else {if ((tmpA == '1' && tmpB == '0') || (tmpA == '0' && tmpB == '1')) {flip++;}else if (tmpA == '1' && tmpB == '1')flip += 2;}}return flip;}private String[] addZero(String a, String b, String c) {int maxLen = a.length();if (b.length() > maxLen)maxLen = b.length();if (c.length()> maxLen)maxLen = c.length();int tmp = maxLen - a.length();String zerotmp = "";for (int i = 0; i < tmp; i++) {zerotmp += "0";}a = zerotmp + a;tmp = maxLen - b.length();zerotmp = "";for (int i = 0; i < tmp; i++) {zerotmp += "0";}b = zerotmp + b;tmp = maxLen - c.length();zerotmp = "";for (int i = 0; i < tmp; i++) {zerotmp += "0";}c = zerotmp + c;String[] res = new String[3];res[0] = a;res[1] = b;res[2] = c;return res;}
}

TIP:

对于我的解法来说,由于使用了一个private方法,由此引出了一个重要的知识点:
Java中函数传参是call by value
Java中所有的参数传递,传递的都是副本
如果原变量代表的是value(如基本类型),那么在函数中修改该值,对原变量不会造成影响;如果原变量代表的是地址(如String,或自定义对象类型),给副本重新赋值(即修改指向)不会改变原变量,若对副本指向的内容做出改变,则会影响到原变量
具体可以参考这一篇,写的比较详细
https://www.cnblogs.com/woshimrf/p/5263018.html

其他解法

本质思路是一样的,只不过利用二进制数的操作(如左移,做与操作判断是1还是0)可以避免长度不一致问题,就不需要我的那个private方法,也不需要转换成二进制再转成charArray这样了

class Solution {public int minFlips(int a, int b, int c) {int res = 0;for(int i = 1, j = 0; j < 32; i = i<< 1, j++) {//分别判断a,b,c的当前位是1 or 0int v1 = a & i;int v2 = b & i;int v3 = c & i;if(v3 != 0) {//c的当前位为1if(v1 == 0 && v2 == 0) {res++;}} else {if(v1 != 0 && v2 != 0) {res += 2;}else if(v1 != 0 || v2 != 0) {res++;}}    }return res;}
}

【Leetcode Medium】1318. Minimum Flips to Make a OR b Equal to c相关推荐

  1. 【LeetCode题解】二叉树的遍历

    我准备开始一个新系列[LeetCode题解],用来记录刷题,顺便复习一下数据结构与算法. 1. 二叉树 二叉树(binary tree)是一种极为普遍的数据结构,树的每一个节点最多只有两个节点--左孩 ...

  2. 重复次数最多的 子串_每日算法系列【LeetCode 424】替换后的最长重复字符

    题目描述 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次.在执行上述操作后,找到包含重复字母的最长子串的长度. 示例1 输入: s = &quo ...

  3. 【LeetCode - 32】最长有效括号

    给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度. 示例 1: 输入:s = "(()" 输出:2 解释:最长有效括号子串是 " ...

  4. 如何给柱状图柱子添加阴影_【LeetCode日记】84. 柱状图中最大的矩形

    题目描述 ` 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 . 求在该柱状图中,能够勾勒出来的矩形的最大面积. 以上是柱状图的示例,其中每个柱子的宽度为 1,给 ...

  5. 【LeetCode笔记】253. 会议室 II(Java、偏数学)

    文章目录 题目描述 思路 && 代码 计划里 hot 100 + 剑指Offer 的题目中唯一一道会员题,同时也是最后一道没写的题,刚好今天 leetcode 发了一天会员可以写上-简 ...

  6. 【LeetCode笔记】301. 删除无效的括号(Java、DFS、字符串)

    文章目录 题目描述 思路 && 代码 二刷 题目描述 [所有可能结果]-> [暴力DFS] 思路 && 代码 代码比较长,但是总体思路很清晰. 剪枝:舍弃左括号. ...

  7. 【LeetCode 1000】 Minimum Cost to Merge Stones

    题目描述 There are N piles of stones arranged in a row. The i-th pile has stones[i] stones. A move consi ...

  8. 【LeetCode 871】 Minimum Number of Refueling Stops

    题目描述 A car travels from a starting position to a destination which is target miles east of the start ...

  9. 【LeetCode 总结】Leetcode 题型分类总结、索引与常用接口函数

    文章目录 零. Java 常用接口函数 一. 动态规划 二. 链表 三. 哈希表 四. 滑动窗口 五. 字符串 六. DFS.BFS 七. 二分法 八. 二叉树 九. 偏数学.过目不忘 and 原地算 ...

  10. 【LeetCode笔记】剑指 Offer 03. 数组中重复的数字(Java、哈希表、原地算法)

    文章目录 题目描述 思路 & 代码 二刷 题目描述 倒是和leetcode 287 寻找重复数很像..但是不能使用那道题的快慢指针法(也可能是我太菜了) 重点在于题干的描述[长度为 n 的数组 ...

最新文章

  1. 中国AI创新者论坛成功举办!这里有一份AI教育和医疗的落地秘籍
  2. java c 流_java对象传输流C/S传输对象
  3. android插上耳机仍用扬声器播放音频
  4. [bzoj4003][JLOI2015]城池攻占_左偏树
  5. BRVAH(让RecyclerView变得更高效) (3)
  6. 《Linux就该这么学》正式版电子书发布!
  7. 华北水利水电大学历年c语言试题,一百题C语言试题
  8. Qt5设置应用程序图标报错Debug Error 1
  9. R_leaflet包_最易上手地图教程(二)
  10. 深度解析,马斯克最新发射的先进火箭
  11. 2021 Java面试真题集锦
  12. python入门之函数结构第二关_Python入门二:函数
  13. 2022年茶艺师(中级)考试题模拟考试题库及模拟考试
  14. 利用python创建自定义的股票指数
  15. 将父类实体类转变子类实体类
  16. 《金刚般若波罗蜜经》分段贯释
  17. 什么是S-uniward?
  18. java百度上传控件_百度Bos上传文件工具类-BosUtils(java)
  19. linux下模拟登陆环境安装
  20. 精确拐点交易体系之追涨停策略

热门文章

  1. 《东周列国志》第四十回 先轸诡谋激子玉 晋楚城濮大交兵
  2. 玩转HTML邮件格式-编写图文并茂邮件如此简单
  3. C语言程序的基本,C语言编程基础知识汇总学习,适合初学者!
  4. Harbor 核心服务不可用---故障排除
  5. 计算机硬盘使用寿命,怎么看电脑硬盘的寿命
  6. 修身养性的句子_关于修身养性的名言
  7. 大数据下的供应商评分系统
  8. android调用虚拟摄像头方法,Android设备虚拟摄像头技术实现
  9. 大数据与云计算的关系
  10. JAVAWEB开发Myeclipse 项目中报“无法解析类型 java.io.ObjectInputStream,从必需的 .class 文件间接引用了它”解决办法