leetCode算法第二天

news2025/1/21 18:40:08

在这里插入图片描述

好好刷刷算法题,提高自己的编码能力。

文章目录

    • 将整数转为罗马数字
    • 将罗马数字转为整数
    • 编写一个函数来查找字符串数组中的最长公共前缀
    • 电话号码的字母组合

将整数转为罗马数字

leetcode链接:https://leetcode.cn/problems/integer-to-roman/

解题思路: 我们将几种特殊规则,也定义在罗马数字与字符的map中,这样就让所有的规则都变成了从左向右,大的在左,小的在右。每一次都从多往少匹配,只要number大于对应的数值,就匹配上对应的字符串,然后从左往右加起来即可。

另外罗马数字还有很大的数,这道题只要求实现3000以内的数字。

var intToRoman = function (num) {
  const romanNumeralMap = {
    M: 1000,
    CM: 900,
    D: 500,
    CD: 400,
    C: 100,
    XC: 90,
    L: 50,
    XL: 40,
    X: 10,
    IX: 9,
    V: 5,
    IV: 4,
    I: 1,
  };
  let result = "";

  while (num > 0) {
    for (let key in romanNumeralMap) {
      if (num >= romanNumeralMap[key]) {
        result += key;
        console.log(result);
        num -= romanNumeralMap[key];
        break;
      }
    }
  }
  return result;
};

将罗马数字转为整数

leetcode链接:https://leetcode.cn/problems/roman-to-integer/

解题思路: 我们将几种特殊规则,也定义在罗马数字与字符的map中,这样就让所有的规则都变成了从左向右,大的在左,小的在右。每一次都从多往少匹配,只要字符匹配到了字符串,并且index为0,就将对应的number加上,剩下的字符串再继续从大到小匹配。

/**
 * @param {string} s
 * @return {number}
 */
var romanToInt = function (s) {
  const romanNumeralMap = {
    M: 1000,
    CM: 900,
    D: 500,
    CD: 400,
    C: 100,
    XC: 90,
    L: 50,
    XL: 40,
    X: 10,
    IX: 9,
    V: 5,
    IV: 4,
    I: 1,
  };

  let num = 0;

  while (s.length) {
    for (let key in romanNumeralMap) {
      const index = s.indexOf(key);
      if (index === 0) {
        s = s.slice(key.length);
        num += romanNumeralMap[key];
        break;
      }
    }
  }

  return num;
};

编写一个函数来查找字符串数组中的最长公共前缀

leetcode链接:https://leetcode.cn/problems/longest-common-prefix/

解题思路:最长公共前缀,顶多是数组里面最短的某个字符串,所以我们先找到最短字符串,然后再依次减少它的长度,去判断是否是数组里面其它元素字符串的前缀,如果最后当最短的字符串长度缩减为1时还不满足,就没有公共前缀。

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function (strs) {
  let minStr = "";
  strs.forEach((item) => {
    if (!minStr || item.length < minStr.length) {
      minStr = item;
    }
  });

  while (minStr) {
    const length = minStr.length;
    for (const value of strs) {
      console.log(value);
      if (value.indexOf(minStr) !== 0) {
        minStr = minStr.slice(0, minStr.length - 1) || "";
        break;
      }
    }

    if (minStr.length < length) {
      continue;
    } else {
      return minStr;
    }
  }
  return "";
};

电话号码的字母组合

leetcode链接:https://leetcode.cn/problems/letter-combinations-of-a-phone-number/

解题思路:循环回溯。digits的长度就决定了我们要循环多少次,每一次循环的次数,由数字对应的数组长度决定,每循环一次,就判断剩余的digits长度是否为1,如果为1就是最后一次循环,退出递归,否则就继续递归。

/**
 * @param {string} digits
 * @return {string[]}
 */
var letterCombinations = function (digits) {

  let NumberMap = {
    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"],
  };

  let result = [];

  function numberToCharCode(ReminDigits = digits, str = "") {
    console.log(ReminDigits, str);
    if (ReminDigits.length === 1) {
      for (const value of NumberMap[ReminDigits]) {
        let newStr = str + value;
        result.push(newStr);
      }
    } else if(ReminDigits.length > 1) {
      const newReminDigits = ReminDigits.slice(1);
      for (const value of NumberMap[ReminDigits[0]]) {
        let newStr = str + value;
        numberToCharCode(newReminDigits, newStr);
      }
    }
  }

  numberToCharCode();
  return result;
};

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

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

相关文章

施工阶段如何应用BIM技术,建模助手有话说

​近些年来&#xff0c;越来越多的建筑项目采用BIM来提升管理水平和品质&#xff0c;特别在施工阶段&#xff0c;通过BIM技术可以将施工现场3D模型与施工进度链接&#xff0c;超前模拟施工情况&#xff0c;完成各种精细化施工方案&#xff0c;除了保障施工工作顺利推进&#xf…

GitHub Copilot 快速入门

GitHub Copilot 是 AI 结对程序员。 可以使用 GitHub Copilot 在编辑器中获取整行或整个函数的建议。 1. 简介 让我们首先了解一些关于 GitHub Copilot 的内容。 这是 GitHub 和 OpenAI 的合作成果。 Copilot 是一种基于人类程序员编写的数十亿行代码训练的语言模型。 &#…

【WSN定位】基于RSSI的加权质心定位算法-Matlab代码

文章目录 1. 原始质心定位算法2. 基于RSSI的加权质心定位算法基本思想3. 基于RSSI的加权质心定位算法流程图4. 部分代码展示5. 运行结果展示6. 资源获取 1. 原始质心定位算法 可参考质心定位算法 2. 基于RSSI的加权质心定位算法基本思想 传统的质心算法在求解过程中只是将未…

网络协议-加密和HTTPs证书

目录 对称加密和非对称加密 加密解密 加密方法/解密方法 对称加密/非对称加密 非对称加密&#xff08;秘钥对&#xff09; 思考 解决信任问题 证书体系 算法如何验证证书就是Alibaba 实际的证书体系 ​编辑 常见算法介绍 DES&#xff08;Data Encryption Standard&…

量子力学、波函数与量子计算:揭开宇宙微观奥秘的神奇之门

在一个遥远的星球&#xff0c;生活着一群拥有超自然力量的智慧生物。他们能够随心所欲地让物体在空间瞬移&#xff0c;甚至能够预测未来。有一天&#xff0c;一位地球科学家意外穿越到了这个星球。经过一番了解&#xff0c;科学家惊奇地发现&#xff0c;他们所掌握的这种神奇力…

ai智能文章改写软件-ai智能文案自动生成

AI同义转换&#xff0c;掀起内容创作新革命&#xff01; 如今&#xff0c;在数字化时代&#xff0c;内容创作日益受到重视&#xff0c;越来越多的人致力于网站排名优化、内容创意提升以及用户体验改善。然而&#xff0c;吸引用户阅读和提供有价值的信息并不那么容易。因此&…

云原生个人线路 K8s本地集群搭建(实操)

声明&#xff1a;此文章为博主个人学习记录&#xff0c;仅供学习和交流&#xff0c;如有侵权请联系博主。 kubernetes本地集群部署 三种方式 minikube 集群模拟器 裸机 kindminikube Docker客户端部署 裸机 环境 虚拟机 VMware 三台centos7 每台2g内存 2cpu 30g硬盘 k8s-mas…

Keil5 MDK新建项目工程

本文重点介绍基于Keil5 MDK实现新建一个完整的工程&#xff0c;第一次新建比较繁琐&#xff0c;建好后续工程可以直接复用 一、新建工程框架 1.新建一个文件夹&#xff0c;命名为Template 2.点击 MDK 的菜单: Project –>New Uvision Project &#xff0c;然后将目录定位…

( “树” 之 前中后序遍历) 145. 二叉树的后序遍历 ——【Leetcode每日一题】

基础概念&#xff1a;前中后序遍历 1/ \2 3/ \ \ 4 5 6层次遍历顺序&#xff1a;[1 2 3 4 5 6]前序遍历顺序&#xff1a;[1 2 4 5 3 6]中序遍历顺序&#xff1a;[4 2 5 1 3 6]后序遍历顺序&#xff1a;[4 5 2 6 3 1] 层次遍历使用 BFS 实现&#xff0c;利用的就是 BFS…

Git从远程仓库克隆仓库后推送到指定分支

git克隆到本地仓库 在得到一个git仓库地址后&#xff0c;首先要配置本地仓库&#xff0c;配置远程仓库地址才可以远程拉取项目。 本地配置的一般流程&#xff1a; git init初始化一个空白git仓库 2. 配置在自己额用户名和邮箱 配置个人信息时方便再团队合作时能知道是谁再何…

2023 CCBN广电展顺利召开,ATEN宏正携广电专属系列解决方案亮相

4月19日-4月21日&#xff0c;第二十九届中国国际广播电视信息网络展览会(CCBN2023)于北京市石景山区首钢会展中心盛大开幕。本届CCBN广电展以“大视听向未来”为主题&#xff0c;内容涵盖广播电视、网络视听、电影、信息化视听、视听消费电子、通信、IT等多个领域创新科技和行业…

MySQL高级第十三篇:MySQL事物日志(redo日志-undo日志执行流程)

MySQL高级第十三篇&#xff1a;MySQL事物日志&#xff08;redo日志-undo日志执行流程&#xff09; 一、概述二、redo 日志1. 为什么需要 redo日志&#xff1f;2. redo 日志的特点3. redo log 整体流程4. redo log 的刷盘策略&#xff1f; 三、undo 日志1. 什么是 undo 日志&…

1026. 节点与其祖先之间的最大差值(4-19日

题目&#xff1a;给定二叉树的根节点 root&#xff0c;找出存在于 不同 节点 A 和 B 之间的最大值 V&#xff0c;其中 V |A.val - B.val|&#xff0c;且 A 是 B 的祖先。 &#xff08;如果 A 的任何子节点之一为 B&#xff0c;或者 A 的任何子节点是 B 的祖先&#xff0c;那么…

context 浅析

在缺少直接调用关系的两个函数之间传递数据&#xff0c;一般都会考虑使用 context&#xff0c;而 context 也被用来存储整个请求链路的公参信息&#xff0c;用户 uid、链路 traceID、特定的业务参数等。函数第一个参数类型设置为 context.Context 也是 Go 的默认写法&#xff0…

2 常见模块库(3)

2.9 积分模块&#xff08;2&#xff09; External reset: 在什么条件下进行外部重置操作描述一下每个选项&#xff1a; Rising&#xff1a;当重置信号从非正的值&#xff08;0或负值&#xff09;变为正值时&#xff0c;重置积分器的状态。 Falling&#xff1a;当重置信号从正…

Java每日一练(20230419)

目录 1. 二叉树的最大深度 &#x1f31f; 2. 二叉树的层序遍历 &#x1f31f;&#x1f31f; 3. 最短回文串 &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Jav…

双向带头循环链表的实现

双向带头循环链表 双向带头循环链表结构讲解期望实现功能创建链表和头节点作用头插和头删头插头删 尾插与尾删尾插尾删 pos 删除和插入插入删除 打印和查找 整体代码 这个数据结构可以算是YYDS的存在了。 我们前面讲过的单链表&#xff0c;尾删和尾插需要遍历数组&#xff0c;极…

是时候该换掉你的axios了

axios是一个基于Promise的HTTP客户端&#xff0c;每周的npm下载量4000W&#xff0c;如果回到在10年前&#xff0c;promise式的请求工具是一个很大的创新&#xff0c;它解决了请求繁琐的问题&#xff0c;在那个性能要求不那么高的年代可谓是一骑绝尘。但随着时间的推移&#xff…

【网络】UDP协议 TCP协议

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【网络】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 推荐一款刷题网站 &#x1f449; LeetCode刷题网站 文章…

Centos7安装Elasticsearch6.4.3和Kibana6.4.3

一、下载好安装文件上传到/usr/local 二、安装Java环境 1&#xff09;、解压jdk tar -zxvf jdk-8u181-linux-x64.tar.gz2&#xff09;、 配置Java环境变量 vim /etc/profile 3&#xff09;、profile末尾添加 export JAVA_HOME/usr/local/jdk1.8.0_181 export PATH$JAVA_HO…