文章目录
- 1. 题目
- 2. 解题
1. 题目
给你一个字符串数组 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'
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-unique-binary-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 转成数字哈希存储,遍历 0 - 216 找到不存在的,转成2进制,前面补零
class Solution {
public:string findDifferentBinaryString(vector<string>& nums) {unordered_set<int> s;string ans;for(auto& n : nums){int number = 0;for(char c : n){number = number*2+(c-'0');}s.insert(number);}for(int i = 0; i < (1<<16); ++i)if(!s.count(i)){ans = convert01(i);while(ans.size() < nums[0].size()){ans.insert(ans.begin(),'0');}return ans;}return "";}string convert01(int x){string ans = "";while(x){if(x&1) ans += "1";else ans += "0";x >>= 1;}reverse(ans.begin(), ans.end());return ans;}
};
4 ms 10 MB C++
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!