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();
}
}