每日算法(第二十四期)

news2024/11/25 6:40:10

先来回顾一下上期的问题及答案:

2023年6月15日

「电话号码的字母组合」(Letter Combinations of a Phone Number)。以下是题目的描述:

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

6d5e5db17b31abaa7ef1c7e5f77545b6.png

示例:

输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]

说明:

  • 尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

以下是对应的JavaScript解答:

const letterCombinations = function(digits) {
  if (!digits || digits.length === 0) {
    return [];
  }
  
  const mappings = {
    "2": ["a", "b", "c"],
    "3": ["d", "e", "f"],
    "4": ["g", "h", "i"],
    "5": ["j", "k", "l"],
    "6": ["m", "n", "o"],
    "7": ["p", "q", "r", "s"],
    "8": ["t", "u", "v"],
    "9": ["w", "x", "y", "z"]
  };
  
  const combinations = [];
  
  const backtrack = (current, nextDigits) => {
    if (nextDigits.length === 0) {
      combinations.push(current);
      return;
    }
    
    const letters = mappings[nextDigits[0]];
    
    for (let i = 0; i < letters.length; i++) {
      backtrack(current + letters[i], nextDigits.slice(1));
    }
  };
  
  backtrack("", digits);
  
  return combinations;
};

解题思路:

  • 使用回溯法来构建所有可能的字母组合。

  • 定义一个映射 mappings,将数字和对应的字母数组进行关联。

  • 初始化一个空数组 combinations,用于存储所有的字母组合。

  • 编写回溯函数 backtrack,该函数接受两个参数:当前已经组合的字母字符串 current 和剩余的数字字符串 nextDigits

  • 当剩余数字字符串的长度为 0 时,说明已经遍历完所有的数字,将当前组合的字母字符串加入 combinations 数组中。

  • 如果剩余数字字符串的长度不为 0,则获取剩余数字字符串的第一个数字对应的字母数组。

  • 遍历该字母数组的每个字母,将当前字母与剩余数字字符串的子串进行递归调用 backtrack

  • 最终返回 combinations 数组,即所有可能的字母组合。

时间复杂度分析:

  • 假设输入的数字字符串的长度为 n,最坏情况下每个数字对应的字母有 4

个,那么总共会有 4^n 个字母组合。

  • 构建所有字母组合的时间复杂度为 O(4^n)。

空间复杂度分析:

  • 使用了常数级别的额外空间来存储字母组合结果和映射关系,不考虑输出结果的空间占用。

  • 空间复杂度为 O(1)。

2023年6月16日

「四数之和」(4Sum)。

题目描述:

给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a、b、c 和 d,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。

注意:

答案中不可以包含重复的四元组。

示例:

输入:nums = [1,0,-1,0,-2,2]target = 0输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]

提示:

  1. 可以使用双指针法来解决。可以固定两个数,然后使用双指针在剩余的部分进行查找。

  2. 需要注意的是,由于题目要求不可以包含重复的四元组,所以在查找过程中要注意去重。

上面问题的答案会在第二天的公众号推文中公布,大家可以关注公众号:程序员每日三问,第一时间获得推送内容。

学习不打烊,充电加油只为遇到更好的自己,每天早上9点纯手工发布面试题(死磕自己,愉悦大家) 希望大家在这浮夸的程序员圈里保持冷静,每天坚持花20分钟来学习与思考,在千变万化,类库层出不穷的今天,不要等到找工作时才狂刷题,提倡每日学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/652016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

记录--前端如何优雅导出多表头xlsx

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 xlsx导出是比较前后端开发过程中都比较常见的一个功能。但传统的二维表格可能很难能满足我们对业务的需求&#xff0c;因为当数据的维度和层次比较多时,二维表格很难以清晰和压缩的方式展现所有的…

macOS Ventura 13.5beta3(22G5048d)发布

系统介绍 黑果魏叔 6 月 16 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.5 开发者预览版 Beta 3 更新&#xff08;内部版本号&#xff1a;22G5048d&#xff09;&#xff0c;本次更新距离上次发布隔了 15 天。 macOS Ventura 带来了台前调度、连续互通相机、Fa…

【Axure 教程】中继器(进阶篇)

一、修改、删除指定行 首先我们还是在 Axure 页面中拖入一个【中继器】&#xff0c;并双击打开&#xff0c;在默认的【矩形】后面加上【修改】和【删除】按钮&#xff1a; 然后我们给修改按钮添加【中继器事件】&#xff0c;选择【更新行】&#xff1a; 可以看到&#xff0c;由…

Axure RP 9 基础教程 元件基础3

11、组合元件 Axure中可以将多个元件组合起来&#xff0c;组合可以被命名&#xff0c;也可以被当成一个元件来进行交互&#xff0c;调整位置和大小等。选中多个元件&#xff0c;在顶部菜单中点击组合图标即可。选中一个组合&#xff0c;点击取消组合&#xff0c;可以就地解散。…

多传感器融合分类及对比

1.多传感器融合的体系结构 在多传感器融合中&#xff0c;按照对原始数据处理方法的不同&#xff0c;多传感器融合系统的体系结构可以分为三种&#xff1a;集中式&#xff0c;分布式和混合式(混合式又分为有反馈结构和无反馈结构)。 集中式融合&#xff1a;将各传感器获得的原始…

软件设计的核心方法及实例解析

李连杰电影版《倚天屠龙记》里有个经典的名场面&#xff0c;祖师爷爷张三丰花了三分钟教张无忌太极拳&#xff0c;张无忌学成打败了对手。三丰爷爷的教学思路是这样的&#xff1a;爷爷演示太极拳让张无忌跟着练&#xff0c;边练边问张无忌记住了多少&#xff0c;等张无忌把所有…

网络系统安全——MS15_034漏洞利用与安全加固

Kali 192.168.124.162 Windows server 2008 192.168.124.169 检查2008服务器的IIS网站是否正常&#xff0c;进入2008服务器&#xff0c;使用ie浏览器访问本机地址 切换到kali&#xff0c;使用命令ping来测试他们的连通性 然后使用使用命令curl测试&#xff0c;测试&#x…

FTP协议,带你了解FTP协议

目录 一、FTP的概述 1.FTP的理念 2.FTP数据连接模式 3.连接模式分类 4.主动和被动模式的工作原理 二、配置FTP服务 1、配置匿名用户FTP服务 1. 1安装FTP服务器软件 1.2 配置FTP服务器 1.3 重启FTP服务器 1.4 测试FTP服务器 2.关闭防火墙安装vsftpd软件包 3.开启FTP…

单片机中移植lua解释器

一、基本开发环境 开发环境基于野火STM32开发板。 前测试的 Lua 解释器版本为 5.4.2。 官网下载lua资源包&#xff0c;下载地址如下&#xff1a; https://www.lua.org/ https://github.com/rjpcomputing/luaforwindows/releases lua: Lua 国内镜像 (gitee.com)‍ 二、移植Lua解…

AIGC数据库工具-阿里开源Chat2DB

前言 今天无意间发现了一个AIGC数据库工具&#xff0c;chat2DB&#xff0c;重点&#xff01;&#xff01;&#xff01;阿里开源&#xff0c;其设计产品的思想给了我很多灵感&#xff0c;故记录一下&#xff0c;并分享给大家。 概述&#xff1a; Chat2DB 是一款有开源免费的多…

驱动开发:内核RIP劫持实现DLL注入

本章将探索内核级DLL模块注入实现原理&#xff0c;DLL模块注入在应用层中通常会使用CreateRemoteThread直接开启远程线程执行即可&#xff0c;驱动级别的注入有多种实现原理&#xff0c;而其中最简单的一种实现方式则是通过劫持EIP的方式实现&#xff0c;其实现原理可总结为&am…

【C++】入门基础知识详解(二)

目录 一、内联函数 1、概念 2、特性 3、内联函数与宏的优缺点 二、auto关键字(C11) 1、auto 简介 2、auto的使用细则 2.1 auto与指针和引用结合起来使用 2.2 在同一行定义多个变量 3、auto不能推导的场景 3.1 auto 不能作为函数的参数 3.2 auto 不能直接用来声明数组 三、…

英语中如何描述五颜六色

前言 如何用英语描述五颜六色&#xff0c;看完这篇文章&#xff0c;你就学会了 &#x1f3e0;个人主页&#xff1a;我是沐风晓月 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是沐风晓月&#xff0c;阿里云社区博客专家 &#x1f609;&#x1f609; &#x1f495; …

Axure RP 9 基础教程 元件基础2

第一章&#xff1a;Axure RP 9的元件(2) 6、改变元件的位置 要改变元件的位置&#xff0c;只需要拖动对应的元件即可。另外也可以在顶部快捷样式菜单中设置坐标值&#xff0c;然后按回车键&#xff0c;让元件移动到指定位置。 X轴是横轴&#xff0c;改变可以调整左右的位置。 Y…

技术科普与解读:ChatGPT 大模型硬核解读!(一)家族历史从GPT-1到ChatGPT

多模态&#xff0c;指的是融合文本、图像、视频或音频等多种模态作为输入或输出。 GPT-4是严格意义上的多模态模型&#xff0c;可以支持图像和文字两类信息的同时输入&#xff0c;输出为文本。从学术界的分析来看&#xff0c;无论是知识/能力获取还是与现实物理世界的交互&…

【应用安全架构】什么是联合身份管理?

介绍 联合身份管理是一种可以在两个或多个信任域之间进行的安排&#xff0c;以允许这些域的用户使用相同的数字身份访问应用程序和服务。这称为联合身份&#xff0c;使用这种解决方案模式称为身份联合。 联合身份管理建立在两个或多个域之间的信任基础之上。例如&#xff0c;信…

如此有艺术感的AI生成式二维码,你肯定没有见过

这是一张很常见的图片&#xff0c;要说有特殊的话可能是由 AI 来生成的&#xff0c;其它并无特别之处。但给它加上三个定位点后&#xff0c;这张图就变成一个可以扫描识别的二维码&#xff1a; 真的假的&#xff1f;不信你长按图片识别一下&#xff01;我一次看到时&#xff0c…

基于Hexo和Butterfly创建个人技术博客,(8) 博客网站butterfly主题UI框架美化

Butterfly官方网站&#xff0c;请 点击进入 说明&#xff1a; 此文中的设置并不影响网站的整体&#xff0c;只是一些视觉上的调整&#xff0c;可以按需调整。 本章目标&#xff1a; 掌握butterfly主题的配置&#xff0c;优化UI样式 一、特效 1、过场动画 在每个页面打开前会有…

干货!具有三维感知的换脸算法

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 作者介绍 李逸轩 上海交通大学2022级硕士研究生&#xff0c;研究兴趣主要是三维人脸生成 报告题目 具有三维感知的换脸算法 内容简介 AI换脸旨在将一张给定目标图片中的人脸五官替换成源图片中的另一个人&#…

操作系统中的进程调度与优先级算法:理论与实践探索

前言 在计算机科学领域中&#xff0c;进程调度是操作系统中一个重要的组成部分&#xff0c;它负责决定哪个进程能够获得 CPU 的执行权&#xff0c;以及如何合理地分配 CPU 时间。通过合理的进程调度算法&#xff0c;可以提高系统的性能和响应能力。在本篇博客中&#xff0c;我…