当前位置: 首页 > news >正文

LeetCode 刷题【16. 最接近的三数之和、17. 电话号码的字母组合】

16. 最接近的三数之和

自己做

解1:三重for循环

class Solution {
public:int threeSumClosest(vector<int>& nums, int target) {int sum = nums[0] + nums[1] + nums[2];int len = nums.size();for(int i = 0; i < len; i++){for(int j = i + 1; j < len; j++){for(int k = j + 1; k < len; k++){if(abs(nums[i] + nums[j] + nums[k] - target) < abs(sum - target))     //差值更小sum = nums[i] + nums[j] + nums[k];}   }}return sum;}
};

解2:双指针

class Solution {
public:int threeSumClosest(vector<int>& nums, int target) {sort(nums.begin(),nums.end());                          //双指针前排序int len = nums.size();int sum = nums[0] + nums[1] + nums[len - 1];for(int i = 0; i < len; i++){int j = i + 1;int k = len - 1;//双指针while(j < k){              if(sum - target== 0)                                                    //找到差值最小,后面不用看了return sum;if(j < k && nums[i] + nums[j] + nums[k] - target > 0){                  //z大了if(abs(nums[i] + nums[j] + nums[k] - target) < abs(sum - target))  //差值小了sum = nums[i] + nums[j] + nums[k];k--;}else if(j < k){                  //j小了if(abs(nums[i] + nums[j] + nums[k] - target) < abs(sum - target))  //差值小了sum = nums[i] + nums[j] + nums[k];j++;}}}return sum;}
};

17. 电话号码的字母组合

自己做

解:找规律,拼组合

class Solution {
public:vector<string> letterCombinations(string digits) {int len = digits.size();                    //总共有多少数字if(len == 0)                                //空字符串单独处理return vector<string>();//组合列表map<int, string> m;m.insert(make_pair(2, "abc"));m.insert(make_pair(3, "def"));m.insert(make_pair(4, "ghi"));m.insert(make_pair(5, "jkl"));m.insert(make_pair(6, "mno"));m.insert(make_pair(7, "pqrs"));m.insert(make_pair(8, "tuv"));m.insert(make_pair(9, "wxyz"));int combine = 1;//统计组合数for (int i = 0; i < len; i++) {combine *= m[digits[i] - 48].size();}vector<string> res(combine);int repeat = combine;                                           //每个字母的重复次数(连续重复)for (int i = 0; i < len; i++) {                               //遍历所有数字int number = digits[i] - 48;                            //数字int numchar_len = m[number].size();                     //该数字对应的字母数量repeat /= numchar_len;                                  //一轮字母输出中每个字母的重复次数//逐步赋值int begin = 0;                                          //目前输出的位置while(begin < combine)for(int get_char = 0; get_char < numchar_len; get_char++)      //一轮字母输出for(int r = 0; r < repeat; r++){                            //重复次数res[begin] += m[number][get_char];begin++;                                                //更新位置}}return res;}
};

http://www.xdnf.cn/news/1198027.html

相关文章:

  • 【前端】【vscode】【.vscode/settings.json】为单个项目配置自动格式化和开发环境
  • 关系与逻辑运算 —— 寄存器操作的 “入门钥匙”
  • 分布式系统中Token续期问题解决方案
  • AIC 2025 热点解读:如何构建 AI 时代的“视频神经中枢”?
  • 四、搭建springCloudAlibaba2021.1版本分布式微服务-加入openFeign远程调用和sentinel流量控制
  • 嵌入式——单片机的独立按键
  • git stash 命令详解
  • leetcode_560 和为K的子数组
  • C语言——————学习笔记(自己看)
  • 2025.7.27总结—新励成
  • Leetcode 3629. Minimum Jumps to Reach End via Prime Teleportation
  • 学习游戏制作记录(改进投掷剑的行为)7.27
  • 孤儿进程、僵尸进程和守护进程
  • 【element-ui】HTML引入本地文件出现font找不到/fonts/element-icons.woff
  • Android CameraX 使用指南:简化相机开发
  • 从零搭建3D激光slam框架-基于mid360雷达节点实现
  • [10月考试] C
  • 论文阅读-IGEV
  • Java进阶7:Junit单元测试
  • Windows10系统使用Cmake4.1.0构建工具+Visual Studio2022编译Opencv4.11教程
  • LabelImg:简洁高效的图像标注工具和下载
  • B站直播视频 | 深度讲解 Yocto 项目:从历史、架构到实战与趋势
  • Vue vuex模块化编码
  • 网络基础19:OSPF多区域实验
  • 中级全栈工程师笔试题
  • Maven之多模块项目管理
  • 什么是加密货币中的节点?
  • 【Linux系统编程】环境变量,进程地址空间与进程控制
  • 使用GIS中基于森林的分类与回归模型来估算房屋价值
  • 工业控制系统安全之 Modbus 协议中间人攻击(MITM)分析与防范