专业的编程技术博客社区

网站首页 > 博客文章 正文

leetcode1980_go_找出不同的二进制字符串

baijin 2024-08-17 10:55:16 博客文章 5 ℃ 0 评论

题目

给你一个字符串数组 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'


解题思路分析

1、哈希辅助;时间复杂度O(2^n),空间复杂度O(n)

func findDifferentBinaryString(nums []string) string {
   n := len(nums)
   m := make(map[string]bool)
   for i := 0; i < len(nums); i++ {
      m[strings.Repeat("0", 16-n)+nums[i]] = true
   }
   for i := 0; i < (1 << n); i++ {
      if m[fmt.Sprintf("%016b", i)] == false {
         res := fmt.Sprintf("%016b", i)
         return res[16-n:]
      }
   }
   return ""
}

2、贪心;时间复杂度O(n),空间复杂度O(1)

func findDifferentBinaryString(nums []string) string {
   n := len(nums)
   res := ""
   // 康托对角线
   // 只要和nums[i][i]不同,构造出的串就和所有的串都不同
   for i := 0; i < n; i++ {
      if nums[i][i] == '0' {
         res = res + "1"
      } else {
         res = res + "0"
      }
   }
   return res
}

总结

Medium题目,借助map来判断即可

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表