Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/1980.html
1980. Find Unique Binary String
Level
Medium
Description
Given an array of strings nums
containing n
unique binary strings each of length n
, return* a binary string of length n
that does not appear in nums
. If there are multiple answers, you may return any of them*.
Example 1:
Input: nums = [“01”,”10”]
Output: “11”
Explanation: “11” does not appear in nums. “00” would also be correct.
Example 2:
Input: nums = [“00”,”01”]
Output: “11”
Explanation: “11” does not appear in nums. “10” would also be correct.
Example 3:
Input: nums = [“111”,”011”,”001”]
Output: “101”
Explanation: “101” does not appear in nums. “000”, “010”, “100”, and “110” would also be correct.
Constraints:
n == nums.length
1 <= n <= 16
nums[i].length == n
nums[i]
is either'0'
or'1'
.
Solution
The number range of numbers with binary string of length n
is [0, 2^n - 1]. Convert all elements in nums
into integers, and loop over the integers from 0 to 2^n - 1 and find the first integer that is not in nums
.
-
class Solution { public String findDifferentBinaryString(String[] nums) { int length = nums.length; int maxNum = (1 << length) - 1; Set<Integer> set = new HashSet<Integer>(); for (String num : nums) set.add(Integer.parseInt(num, 2)); int different = 0; for (int i = 0; i <= maxNum; i++) { if (!set.contains(i)) { different = i; break; } } String differentStr = toBinaryString(different, length); return differentStr; } public String toBinaryString(int num, int length) { StringBuffer sb = new StringBuffer(); for (int i = 0; i < length; i++) { int remainder = num % 2; sb.append(remainder); num /= 2; } sb.reverse(); return sb.toString(); } } ############ class Solution { public String findDifferentBinaryString(String[] nums) { int mask = 0; for (var x : nums) { int cnt = 0; for (int i = 0; i < x.length(); ++i) { if (x.charAt(i) == '1') { ++cnt; } } mask |= 1 << cnt; } for (int i = 0;; ++i) { if ((mask >> i & 1) == 0) { return "1".repeat(i) + "0".repeat(nums.length - i); } } } }
-
// OJ: https://leetcode.com/problems/find-unique-binary-string/ // Time: O(N^2) // Space: O(N) class Solution { public: string findDifferentBinaryString(vector<string>& A) { int n = A.size(); unordered_set<int> s; for (auto &n : A) { s.insert(stoi(n, 0, 2)); } for (int i = 0; i <= n; ++i) { if (s.count(i)) continue; string ans; for (int j = 0; j < n; ++j) { ans += '0' + (i & 1); i >>= 1; } reverse(begin(ans), end(ans)); return ans; } return ""; } };
-
class Solution: def findDifferentBinaryString(self, nums: List[str]) -> str: mask = 0 for x in nums: mask |= 1 << x.count("1") n = len(nums) for i in range(n + 1): if mask >> i & 1 ^ 1: return "1" * i + "0" * (n - i) ############ # 1980. Find Unique Binary String # https://leetcode.com/problems/find-unique-binary-string/ class Solution: def findDifferentBinaryString(self, nums: List[str]) -> str: n = len(nums) s = set(nums) for i in range(1 << n): x = bin(i)[2:].zfill(n) if x not in s: return x
-
func findDifferentBinaryString(nums []string) string { mask := 0 for _, x := range nums { mask |= 1 << strings.Count(x, "1") } for i := 0; ; i++ { if mask>>i&1 == 0 { return strings.Repeat("1", i) + strings.Repeat("0", len(nums)-i) } } }
-
public class Solution { public string FindDifferentBinaryString(string[] nums) { int mask = 0; foreach (var x in nums) { int cnt = x.Count(c => c == '1'); mask |= 1 << cnt; } int i = 0; while ((mask >> i & 1) == 1) { i++; } return string.Format("{0}{1}", new string('1', i), new string('0', nums.Length - i)); } }