返回介绍

solution / 1900-1999 / 1980.Find Unique Binary String / README_EN

发布于 2024-06-17 01:03:12 字数 5418 浏览 0 评论 0 收藏 0

1980. Find Unique Binary String

中文文档

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'.
  • All the strings of nums are unique.

Solutions

Solution 1: Counting + Enumeration

Since the number of occurrences of '1' in a binary string of length $n$ can be $0, 1, 2, \cdots, n$ (there are $n + 1$ possibilities), we can certainly find a new binary string that has a different number of '1's from every string in nums.

We can use an integer $mask$ to record the occurrence of '1' in all strings, i.e., the $i$-th bit of $mask$ is $1$ indicates that there is a string of length $n$ in which '1' appears $i$ times, otherwise it does not exist.

Then we start to enumerate the number of times '1' appears in a binary string of length $n$ from $0$. If the $i$-th bit of $mask$ is $0$, it means that there is no string of length $n$ in which '1' appears $i$ times. We can return this string as the answer.

The time complexity is $O(L)$, where $L$ is the total length of the strings in nums. The space complexity is $O(1)$.

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)
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);
      }
    }
  }
}
class Solution {
public:
  string findDifferentBinaryString(vector<string>& nums) {
    int mask = 0;
    for (auto& x : nums) {
      int cnt = count(x.begin(), x.end(), '1');
      mask |= 1 << cnt;
    }
    for (int i = 0;; ++i) {
      if (mask >> i & 1 ^ 1) {
        return string(i, '1') + string(nums.size() - i, '0');
      }
    }
  }
};
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)
    }
  }
}
function findDifferentBinaryString(nums: string[]): string {
  let mask = 0;
  for (let x of nums) {
    const cnt = x.split('').filter(c => c === '1').length;
    mask |= 1 << cnt;
  }
  for (let i = 0; ; ++i) {
    if (((mask >> i) & 1) === 0) {
      return '1'.repeat(i) + '0'.repeat(nums.length - 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));
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文