Leetcode刷题100天—1980. 找出不同的二进制字符串(字符串)—day19
Posted 神的孩子都在歌唱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题100天—1980. 找出不同的二进制字符串(字符串)—day19相关的知识,希望对你有一定的参考价值。
前言:
作者:神的孩子在歌唱
大家好,我叫运智
1980. 找出不同的二进制字符串
难度中等4收藏分享切换为英文接收动态反馈
给你一个字符串数组 nums
,该数组由 n
个 互不相同 的二进制字符串组成,且每个字符串长度都是 n
。请你找出并返回一个长度为 n
且 没有出现 在 nums
中的二进制字符串*。*如果存在多种答案,只需返回 任意一个 即可。
示例 1:
输入:nums = ["01","10"]
输出:"11"
解释:"11" 没有出现在 nums 中。"00" 也是正确答案。
示例 2:
输入:nums = ["00","01"]
输出:"11"
解释:"11" 没有出现在 nums 中。"10" 也是正确答案。
示例 3:
输入:nums = ["111","011","001"]
输出:"101"
解释:"101" 没有出现在 nums 中。"000"、"010"、"100"、"110" 也是正确答案。
提示:
n == nums.length
1 <= n <= 16
nums[i].length == n
nums[i]
为'0'
或'1'
package 水题;
import java.util.HashSet;
import java.util.Set;
/*
*https://leetcode-cn.com/problems/find-unique-binary-string/
*/
public class _1980_找出不同的二进制字符串 {
// 通过哈希表来判断
public String findDifferentBinaryString(String[] nums) {
// 先判断n的长度
int len=nums[0].length();
Set<String> map=new HashSet<>();
for(String num:nums) {
map.add(num);
}
// 字符由0和1组成,所以我们遍历判断他是否在map中
// 遍历比nums里面的数更多的一个数就够了
for(int i=0;i<=nums.length;i++) {
// 设置保存字符串,在 StringBuilder 上的主要操作是 append 和 insert 方法。
StringBuilder str=new StringBuilder();
// 通过for循环组成二进制
for(int j=0;j<len;j++) {
// 通过无符号右移运算符>>>和与&符号(是1就是1,否则都为0)
str.append( i>>> j&1);
// 第一次遍历i右移j位
}
// 最后逆转,比如这样输出顺序就是00,01,10,这里没有11,不过没关系,
//题目是nums[i].length == n,所以最多只要三个就能判断
str.reverse();
if(!map.contains(str.toString())) {
return str.toString();
}
}
return "";
}
}
本人csdn博客:https://blog.csdn.net/weixin_46654114
转载说明:跟我说明,务必注明来源,附带本人博客连接。
以上是关于Leetcode刷题100天—1980. 找出不同的二进制字符串(字符串)—day19的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—5855. 找出数组中的第 K 大整数(优先队列)—day22
Leetcode刷题100天—5855. 找出数组中的第 K 大整数(优先队列)—day22
Leetcode刷题100天—2028. 找出缺失的观测数据(数组)—day56
Leetcode刷题100天—2028. 找出缺失的观测数据(数组)—day56