【Leetcode Medium】1318. Minimum Flips to Make a OR b Equal to c
原题链接
题目描述
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相关推荐
- 【LeetCode题解】二叉树的遍历
我准备开始一个新系列[LeetCode题解],用来记录刷题,顺便复习一下数据结构与算法. 1. 二叉树 二叉树(binary tree)是一种极为普遍的数据结构,树的每一个节点最多只有两个节点--左孩 ...
- 重复次数最多的 子串_每日算法系列【LeetCode 424】替换后的最长重复字符
题目描述 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次.在执行上述操作后,找到包含重复字母的最长子串的长度. 示例1 输入: s = &quo ...
- 【LeetCode - 32】最长有效括号
给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度. 示例 1: 输入:s = "(()" 输出:2 解释:最长有效括号子串是 " ...
- 如何给柱状图柱子添加阴影_【LeetCode日记】84. 柱状图中最大的矩形
题目描述 ` 给定 n 个非负整数,用来表示柱状图中各个柱子的高度.每个柱子彼此相邻,且宽度为 1 . 求在该柱状图中,能够勾勒出来的矩形的最大面积. 以上是柱状图的示例,其中每个柱子的宽度为 1,给 ...
- 【LeetCode笔记】253. 会议室 II(Java、偏数学)
文章目录 题目描述 思路 && 代码 计划里 hot 100 + 剑指Offer 的题目中唯一一道会员题,同时也是最后一道没写的题,刚好今天 leetcode 发了一天会员可以写上-简 ...
- 【LeetCode笔记】301. 删除无效的括号(Java、DFS、字符串)
文章目录 题目描述 思路 && 代码 二刷 题目描述 [所有可能结果]-> [暴力DFS] 思路 && 代码 代码比较长,但是总体思路很清晰. 剪枝:舍弃左括号. ...
- 【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 ...
- 【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 ...
- 【LeetCode 总结】Leetcode 题型分类总结、索引与常用接口函数
文章目录 零. Java 常用接口函数 一. 动态规划 二. 链表 三. 哈希表 四. 滑动窗口 五. 字符串 六. DFS.BFS 七. 二分法 八. 二叉树 九. 偏数学.过目不忘 and 原地算 ...
- 【LeetCode笔记】剑指 Offer 03. 数组中重复的数字(Java、哈希表、原地算法)
文章目录 题目描述 思路 & 代码 二刷 题目描述 倒是和leetcode 287 寻找重复数很像..但是不能使用那道题的快慢指针法(也可能是我太菜了) 重点在于题干的描述[长度为 n 的数组 ...
最新文章
- 中国AI创新者论坛成功举办!这里有一份AI教育和医疗的落地秘籍
- java c 流_java对象传输流C/S传输对象
- android插上耳机仍用扬声器播放音频
- [bzoj4003][JLOI2015]城池攻占_左偏树
- BRVAH(让RecyclerView变得更高效) (3)
- 《Linux就该这么学》正式版电子书发布!
- 华北水利水电大学历年c语言试题,一百题C语言试题
- Qt5设置应用程序图标报错Debug Error 1
- R_leaflet包_最易上手地图教程(二)
- 深度解析,马斯克最新发射的先进火箭
- 2021 Java面试真题集锦
- python入门之函数结构第二关_Python入门二:函数
- 2022年茶艺师(中级)考试题模拟考试题库及模拟考试
- 利用python创建自定义的股票指数
- 将父类实体类转变子类实体类
- 《金刚般若波罗蜜经》分段贯释
- 什么是S-uniward?
- java百度上传控件_百度Bos上传文件工具类-BosUtils(java)
- linux下模拟登陆环境安装
- 精确拐点交易体系之追涨停策略
热门文章
- 《东周列国志》第四十回 先轸诡谋激子玉 晋楚城濮大交兵
- 玩转HTML邮件格式-编写图文并茂邮件如此简单
- C语言程序的基本,C语言编程基础知识汇总学习,适合初学者!
- Harbor 核心服务不可用---故障排除
- 计算机硬盘使用寿命,怎么看电脑硬盘的寿命
- 修身养性的句子_关于修身养性的名言
- 大数据下的供应商评分系统
- android调用虚拟摄像头方法,Android设备虚拟摄像头技术实现
- 大数据与云计算的关系
- JAVAWEB开发Myeclipse 项目中报“无法解析类型 java.io.ObjectInputStream,从必需的 .class 文件间接引用了它”解决办法