力扣hot100 —— 电话号码字母组合; 子集 (非回溯做法)简单易懂

devtools/2025/2/28 2:24:35/

由于博主对回溯也不是很熟悉,这里提出一种简单易懂的解法(有点暴力)

解题思路:

每个数字对应有自己的字母串;

首先遍历将每个字母存入也就是 res{{a},{b},{c}}

然后遍历后续数子对应的字母,让每个字母与当前res中·元素组合然后更新进去

res{{ad},{bd},{cd},{ae},{be},{ce},{af},{bf},{cf}}

class Solution {
public:vector<string> base{" ", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};vector<string> letterCombinations(string digits) {// 暴力解法,逐渐添加,组合vector<string> res;if (digits.empty()) {return res; // 如果输入为空,直接返回空结果}res.push_back(""); // 初始化结果,加入一个空字符串for (auto &digit : digits) {int dig_num = digit - '0'; // 将字符数字转为整数string chars = base[dig_num - 1]; // 获取当前数字对应的字符集vector<string> newRes; // 用于存储新的组合for (auto &s : res) {for (auto &ch : chars) {newRes.push_back(s + ch); // 将当前字符与已有组合拼接}}res = newRes; // 更新结果}return res;}
};

解法思路:与字母组合类似,只是这里不用更新结果;逐渐将每次组合加入就行

(nums = [1, 2, 3, 4], ans = [[ ]], 下标 i 从 0 开始)

1. ans = [[ ]], nums[0] = 1, 将元素1和ans内所有子集组合并添加进ans

此时:ans = [[ ], [1]];

2. ans = [[ ], [1]], nums[1] = 2, 将元素2和ans内所有子集组合并添加进ans

此时:ans = [[ ], [1], [2], [1, 2]];

3. ans = [[ ], [1], [2], [1, 2]], nums[2] = 3, 将元素3和ans内所有子集组合并添加进ans

此时:ans = [[ ], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]];

3. ans = [[ ], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3]], nums[3] = 3, 将元素3和ans内所有子集组合并添加进ans

此时:ans = [[ ], [1], [2], [1, 2], [3], [1, 3], [2, 3], [1, 2, 3], [4], [1, 4], [2, 4], [1, 2, 4], [3, 4], [1, 3, 4], [2, 3, 4], [1, 2, 3, 4]];

class Solution {
public:vector<vector<int>> subsets(vector<int>& nums) {// 组合添加,空集也算子集// 遍历数字,每个数子与当前结果中的数据组合,然后添加进去vector<vector<int>> res;res.push_back({});for(auto &num : nums){vector<int> temp; // 暂存当前结果中的元素, push_back是void 类型不会直接改变int sub_size = res.size();for(int i= 0; i<sub_size;i++){ // 获取当前子集进行组合temp = res[i];temp.push_back(num);res.push_back(temp);}}return res;}};


http://www.ppmy.cn/devtools/163227.html

相关文章

【自学笔记】Vue基础知识点总览-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 引言Vue基础知识概览1. Vue实例2. 模板语法3. 计算属性4. 事件处理 总结 引言 Vue.js是一个构建用户界面的渐进式框架&#xff0c;以其简洁的API和易于上手的特点受…

【鸿蒙应用开发】性能优化

渲染方面 Repeat&#xff1a;可复用的循环渲染 Repeat 一般会用于取代 ForEach&#xff0c;相较后者具有更强的渲染性能&#xff0c;Repeat 具有两种工作模式&#xff1a; non-virtualScroll 模式 在初始化页面时就加载列表中的全部子组件。 相比于ForEach&#xff0c;具有…

Unity3D 战斗系统架构与设计详解

引言 战斗系统是许多游戏的核心玩法之一&#xff0c;尤其是在动作游戏、角色扮演游戏&#xff08;RPG&#xff09;和策略游戏中。Unity3D 作为一款强大的游戏引擎&#xff0c;提供了丰富的工具和 API 来帮助开发者实现复杂的战斗系统。本文将详细探讨 Unity3D 中战斗系统的架构…

JavaScript 验证 API

JavaScript 验证 API 引言 在网页开发中,数据验证是确保用户输入数据准确性和完整性的关键步骤。JavaScript 作为网页开发的主要脚本语言,提供了丰富的验证 API,使得开发者能够轻松实现各种验证需求。本文将详细介绍 JavaScript 验证 API 的使用方法、特点和注意事项。 一…

【行业解决方案篇十四】【DeepSeek法律科技:合同条款解析引擎】

开篇:当AI成为"法律CT机" 你可能不知道,某上市公司法务部去年审了2185份合同,其中73%的时间花在找条款间的"埋伏笔"。现在DeepSeek的合同解析系统,能让这些戴着金丝眼镜的法律顾问们用CT扫描般的精度看透每份合同。今天要讲的这个系统,不只是关键词匹…

微信小程序 - 自定义实现分页功能

概述 在微信小程序项目中&#xff0c;没有现成的分页器组件&#xff0c;所以需要自定义实现分页功能 自定义实现分页功能 1、index.json {"usingComponents": {"van-button": "vant/weapp/button/index"} }这里使用 Vant Weapp 中的 van-butt…

聚焦低空经济,峰飞航空飞行汽车开启未来出行新篇章

曾经只存在于科幻电影中的“飞行汽车”&#xff0c;如今正以eVTOL&#xff08;电动垂直起降飞行器&#xff09;的形式加速落地&#xff0c;成为全球科技竞争的新焦点。作为低空经济的核心载体之一&#xff0c;eVTOL不仅承载着缓解地面交通压力的使命&#xff0c;更被视为推动城…

git上传gitee仓库---简单方便

安装完git以后 在资源管理器中右键&#xff1a; 选择Open Git Bash here 接着gitclone&#xff0c;从gitee上面复制链接: https://gitee.com/hekai666/python-deeplearning.git 粘贴过来&#xff1a; 回车&#xff1a; 然后在本地就会多出来一个文件&#xff1a; 打开文件夹以…