A.每日一题——1980. 找出不同的二进制字符串 📅 发布时间:2026/7/17 8:35:40 👁️ 浏览次数: 题目连接1980. 找出不同的二进制字符串中等算法原理解法一暴力枚举之前用到显示回溯和隐式回溯的题目E.位运算-基础——3211. 生成不含相邻零的二进制字符串显式回溯与隐式回溯的区别底层都是回溯思想只是写法随容器变而已①固定长度结构char []、数组→ 天然适合隐式回溯写法更干净②变长结构StringBuffer、List、Builder→ 必须显式回溯不然必错写法一StringBuffer→显式回溯2ms击败39.13%时间复杂度O (n × 2ⁿ)①将nums中所有数全扔进Set里方便判断是否存在②显式递归回溯给每一位填上0或1③递归出口当长度达到n时判断哈希表中是否存在过若不存在直接返回这个字符串④回溯常用到cur.deleteCharAt(int index)写法二数组直接覆盖→隐式回溯1ms击败73.91%时间复杂度O (n × 2ⁿ)由于字符串长度固定因此我们可以采用数组直接覆盖来实现原本的回溯过程其余写法与写法一相同写法三枚举二进制位对应的整数4ms击败4.35%时间复杂度O (n × 2ⁿ)先把nums中每个二进制字符串对应的整数存进Set里由于每个二进制字符串长度为n因此我们可以遍历2ⁿ-1在内的所有整数只要Set里没有就说明我们找到了答案需要注意的是 Integer.toBinaryString(String s,2)返回的二进制字符串是不含前置0的因此我们需要手动添加前置0直至长度达到n写法三的优化4ms击败4.35%时间复杂度O (2ⁿ)优化点1我们可以用一个整数ret代替遍历因为我们只需找到一个不在Set中的数即可无需统计个数因此只要Set里存在ret就可以ret遍历下个数优化点2手动添加前置0时也可以避免循环直接用0.repeat(int n)生成n个0进行拼接解法二康托对角线0ms击败100.00%时间复杂度O(N)①对于nums中的第 i 个字符串索引为 i 取它的第 i 位字符对角线位置②对该位字符取反0→11→0作为结果字符串的第 i 位③最终构造的字符串与nums中每个字符至少有一个对角线为不同因此必然不在nums中举个例子nums[111,011,000]ret[0]0≠1ret[1]1≠0ret[2]1≠0得出ret001与nums中都不同反证法比如当ret的第一位0001与后续000第一位0000相同时ret也不能与000完全相同因为它们在第三位上存在取反Java代码class Solution { //解法一暴力枚举-写法一显式递归 int n; private StringBuffer curnew StringBuffer(); public String findDifferentBinaryString(String[] nums) { nnums.length; SetString hashnew HashSet(); for(String s:nums) hash.add(s); return dfs(0,cur,hash); } private String dfs(int i,StringBuffer cur,SetString hash){ if(in) return hash.contains(cur.toString())?:cur.toString(); cur.append(0); String s0dfs(i1,cur,hash); if(s0!) return s0; cur.deleteCharAt(cur.length()-1);//回溯 cur.append(1); String s1dfs(i1,cur,hash); if(s1!) return s1; cur.deleteCharAt(cur.length()-1);//回溯 //照顾编译器因为题目保证有解 return ; } }class Solution { //解法一暴力枚举-写法二隐式回溯 int n; char[] cur; public String findDifferentBinaryString(String[] nums) { nnums.length; curnew char[n]; SetString hashnew HashSet(); for(String s:nums) hash.add(s); return dfs(0,cur,hash); } private String dfs(int i,char[] cur,SetString hash){ if(in) return hash.contains(new String(cur))?:new String(cur); cur[i]0; String s0dfs(i1,cur,hash); if(s0!) return s0; cur[i]1; String s1dfs(i1,cur,hash); if(s1!) return s1; //照顾编译器因为题目保证有解 return ; } }class Solution { //解法一暴力枚举-写法三枚举二进制对应的整数 public String findDifferentBinaryString(String[] nums) { int nnums.length; SetInteger hashnew HashSet(); //转成整型存进哈希表 for(String s:nums) hash.add(Integer.parseInt(s,2)); for(int i0;i(1n);i){ if(!hash.contains(i)){ String binInteger.toBinaryString(i); //手动添加前置0 while(bin.length()n) bin0bin; return bin; } } //照顾编译器因为题目保证有解 return ; } }class Solution { //解法一暴力枚举-写法三枚举二进制对应的整数(优化版) public String findDifferentBinaryString(String[] nums) { SetInteger hashnew HashSet(); //转成整型存进哈希表 for(String s:nums) hash.add(Integer.parseInt(s,2)); int ret0; while(hash.contains(ret)) ret; String binInteger.toBinaryString(ret); return 0.repeat(nums.length-bin.length())bin; } }class Solution { //解法二康托对角线 public String findDifferentBinaryString(String[] nums) { int nnums.length; char[] retnew char[n]; for(int i0;in;i) ret[i](char)(nums[i].charAt(i)^1); return new String(ret); } }
AI时代:人和人之间的差距被放大,AI不能弥补你的短板 2026年的今天,如果你还没有用过ChatGPT、Claude或者Cursor写代码,似乎已经成了某种“原始人”。各种AI工具的广告铺天盖地——“人人都是程序员”“用AI打造下一个独角兽”“从零到一学会编程”……仿佛只要掌握了这些工具,普通人就能摇身一变… 2026/7/16 7:56:48
SQLyog安装配置(注册码)连接MySQL 相关文章 第二篇:MySQL安装与配置(基于小皮面板(phpstudy))_配置小皮面板-CSDN博客 第六篇:MySQL图形化管理工具_datagrip百度百科-CSDN博客 下载资源 博主给你打包好了安装包,在网盘里… 2026/7/13 22:26:55
深度拆解:OpenClaw 为何疯狂烧 Token?RAG 真的死了吗? 理解Agent的上下文是怎么构建的、记忆检索是怎么工作的、钱到底烧在了哪里,能帮公司省掉推理费的人,才是Agent工程师真正值钱的地方。 OpenClaw是2026年初最火的开源AI Agent项目。它在不到两周内GitHub Star数量突破了17.5万。 但很多人兴奋地把它跑起来… 2026/7/15 1:40:17
SSL 证书申请方法全攻略:读懂原理、掌握流程、高效部署 在互联网时代,网站安全至关重要。浏览器地址栏中的锁形图标,正是SSL证书在发挥作用。那么,SSL证书究竟是什么?又该如何申请?本文将为你一一解答。什么是SSL证书?SSL证书(安全套接层证书… 2026/7/17 18:36:01
Claude Code内置浏览器:AI编程助手从代码生成到全栈开发伙伴的演进 如果你是一名开发者,最近可能已经感受到了AI编程工具领域的暗流涌动。一边是谷歌Gemini的发布一再延期,让期待新模型的开发者们望眼欲穿;另一边是Anthropic的Claude Code悄然推出内置浏览器功能,让AI编程助手的能力边界再次扩展。… 2026/7/17 18:36:01
cann/asc-devkit Fma接口文档 Fma 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/cann/a… 2026/7/17 18:34:01
Ascend C IsInf接口临时空间大小获取 GetIsInfMaxMinTmpSize 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://… 2026/7/17 18:34:01
CentOS 7安装中dracut-initqueue超时问题解决方案 1. 问题现象与背景分析当你在物理机或虚拟机上安装CentOS 7时,可能会遇到一个令人头疼的错误提示:"dracut-initqueue timeout"。这个错误通常发生在系统启动阶段,表现为长时间卡在初始化界面,最终显示超时错误并进入紧急… 2026/7/17 18:32:00
计算机毕业设计之体检系统设计与实现 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代… 2026/7/17 18:32:00
【WPS AI表格避坑白皮书】:实测发现87%用户正在误用AI函数——这5个致命错误导致结果偏差超42% 更多请点击: https://intelliparadigm.com 第一章:WPS AI表格的核心能力与适用边界 WPS AI表格将大语言模型能力深度集成于电子表格环境中,实现从自然语言指令到结构化数据操作的端到端转化。其核心并非替代传统公式或宏编程,而是… 2026/7/17 0:00:08
Cursor终端插件生态避坑指南:23个实测低效插件黑名单,附3个自研轻量替代方案 更多请点击: https://intelliparadigm.com 第一章:Cursor终端插件生态避坑指南概览 Cursor 作为基于 VS Code 内核构建的 AI 原生编辑器,其终端插件生态虽活跃,但存在兼容性断层、权限策略突变与调试链路断裂等典型风险。开发者常… 2026/7/17 0:00:08
ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表) 更多请点击: https://codechina.net 第一章:ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表) 提示词工程已从经验试错迈入变量驱动的科学阶段。实证研究表明,影响… 2026/7/17 0:00:08
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/17 0:28:39
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/17 6:02:24
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/16 12:08:13