【LeetCode-面试经典150题-day18】

目录

17.电话号码的字母组合

 77.组合

46.全排列 

52.N皇后Ⅱ 


 

17.电话号码的字母组合

题意:

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

【输入样例】digits="23"

【输出样例】["ad","ae","af","bd","be","bf","cd","ce","cf"]

class Solution {public List<String> letterCombinations(String digits) {List<String> ans = new ArrayList<String>();if(digits.length() == 0){return ans;}Map<Character,String> phoneMap = new HashMap<Character,String>(){{put('2',"abc");put('3',"def");put('4',"ghi");put('5',"jkl");put('6',"mno");put('7',"pqrs");put('8',"tuv");put('9',"wxyz");}};findString(ans,phoneMap,digits,0,new StringBuffer());return ans;}public void findString(List<String> ans, Map<Character,String> phoneMap,String digits,int index,StringBuffer curAns){if(index == digits.length()){//证明全部遍历完比ans.add(curAns.toString());//把找到的答案转成String类型存到列表中}else{char digit = digits.charAt(index);//取出字符,到map中获取对应的值String letters = phoneMap.get(digit);for(int i=0;i<letters.length();++i){curAns.append(letters.charAt(i));//递归调用,主要是用于找到下一位可能的字符findString(ans,phoneMap,digits,index+1,curAns);//递归回来进行回溯,把当前的字符删掉,寻找更多可能curAns.deleteCharAt(index);}}}
}

时间: 击败了46.35%

内存: 击败了26.39%

 77.组合

题意:

给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。

你可以按 任何顺序 返回答案。

【输入样例】n=4,k=2

【输出样例】

[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4],
]
class Solution {List<List<Integer>> ans = new ArrayList<List<Integer>>();public List<List<Integer>> combine(int n, int k) {findAns(1,n,k,new ArrayList<>());//从1开始找return ans;}public void findAns(int index,int n,int k,List<Integer> list){if(k == 0){//找到正确的答案,添加ans.add(new ArrayList<>(list));return;}for(int i=index;i<=n-k+1;++i){list.add(i);findAns(i+1,n,k-1,list);list.remove(list.size()-1);}}
}

时间: 击败了56.50%

内存: 击败了5.94%

46.全排列 

题意:

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

【输入样例】nums=[1,2,3]

【输出样例】[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

解题思路:递归回溯+哈希表

1. 构建一个哈希map,用来存放当前那一些数字可以用,那一些数字不可以用;

2. 递归函数的作用是找到第index位上可以是那个数字,数字是位于数字中,所以对数组进行枚举来获得第i位的值,之后用哈希map判断此位数字是否已经被用过。被用过继续找,没被用过则添加到list中,并修改标志位,继续寻找第index+1位;

3.回溯的时候除了要移开最后一位数字,还需要重新修改标志位。

class Solution {List<List<Integer>> ans = new ArrayList<List<Integer>>();public List<List<Integer>> permute(int[] nums) {//构造map,初始化所有数字现在都可以用int len = nums.length;Map<Integer,Boolean> useMap= new HashMap<Integer,Boolean>();for(int i=0;i<len;++i){useMap.put(nums[i],true);}searchOrder(1,nums,len,useMap,new ArrayList<>());//从第一位开始找return ans;}public void searchOrder(int index,int[] nums,int len,Map<Integer,Boolean> useMap,List<Integer> list){if(index == len+1){//找到正确的答案,添加ans.add(new ArrayList<>(list));return;}for(int i=0; i < len;++i){//从第一位到最后一位,可以选择那一些int num = nums[i];if(useMap.get(num) == true){list.add(num);//修改标志位useMap.put(num,false);searchOrder(index+1,nums,len,useMap,list);list.remove(list.size()-1);useMap.put(num,true);}}}
}

时间: 击败了78.23%

内存: 击败了48.52% 

52.N皇后Ⅱ 

题意:

n 皇后问题 研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。

给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。

【输入样例】n=4

【输出样例】2

解题思路:递归回溯+布尔数组

为什么是!row[i] && !dia[index-i+n] && !assDia[index+i]?

row[i]:好理解,同一列已经有值

but,dia和assDia中的取值为什么是这样书写的呢?

 

class Solution {int ans = 0;public int totalNQueens(int n) {//n皇后问题//任意两个皇后不能在同一横轴,纵轴,对角线上//三个数组,表示当前纵轴,正对角线,副对角线上是否有值,默认falseboolean[] row = new boolean[n+1];boolean[] dia = new boolean[2*n+1];boolean[] assDia = new boolean[2*n+1];search(1,n,row,dia,assDia);//从第一行开始判断return ans;}private void search(int index,int n, boolean[] row, boolean[] dia, boolean[] assDia){if(index == n+1){++ans;return;}//index表示当前查找第几行,所以遍历遍历列就可以了for(int i=1;i<=n;i++){if(!row[i] && !dia[index-i+n] && !assDia[index+i]){row[i] = dia[index-i+n] = assDia[index+i] = true;//已经有值search(index+1,n,row,dia,assDia);//回溯row[i] = dia[index-i+n] = assDia[index+i] = false;}}}
}

时间: 击败了100.00%

内存: 击败了74.08% 

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

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

相关文章

mysql:[Some non-transactional changed tables couldn‘t be rolled back]不支持事务

1. mysql创建表时默认引擎MyIsam&#xff0c;因此不支持事务的操作&#xff1b; 2. 修改mysql的默认引擎&#xff0c;可以使用show engine命令查看支持的引擎&#xff1a; 【my.conf详情说明】my.cnf配置文件注释详解_xiaolin01999的博客-CSDN博客 3. 原来使用MyIsam创建的表…

Linux系统中驱动面试分享

​ 1、驱动程序分为几类&#xff1f; 字符设备驱动 块设备驱动 网络设备驱动 2、字符设备驱动需要实现的接口通常有哪些 open、close、read、write、ioctl等接口。 3、主设备号与次设备号的作用 主设备号和次设备号是用来标识系统中的设备的&#xff0c;主设备号用来标识…

postgresql并行查询(高级特性)

######################## 并行查询 postgresql和Oracle一样支持并行查询的,比如select、update、delete大事无开启并行功能后,能够利用多核cpu,从而充分发挥硬件性能,提升大事物的处理效率。 pg在9.6的版本之前是不支持的并行查询的,从9.6开始支持并行查询,但是功能非常…

OpenCV(十六):高斯图像金字塔

目录 1.高斯图像金字塔原理 2.高斯图像金字塔实现 1.高斯图像金字塔原理 高斯图像金字塔是一种用于多尺度图像表示和处理的重要技术。它通过对图像进行多次高斯模糊和下采样操作来生成不同分辨率的图像层级&#xff0c;每个层级都是原始图像的模糊和降采样版本。 以下是高斯…

count(1)与count(*)的区别、ROUND函数

部分问题 1. count(1)与count(*)的区别2. ROUND函数3. SQL19 分组过滤练习题4. Mysql bigdecimal 与 float的区别5. 隐式内连接与显示内连接 &#xff08;INNER可省略&#xff09; 1. count(1)与count(*)的区别 COUNT(*)和COUNT(1)有什么区别&#xff1f; count(*)包括了所有…

图表背后的故事:数据可视化的威力与影响

数据可视化现在在市场上重不重要&#xff1f;这已经不再是一个简单的问题&#xff0c;而是一个不可忽视的现实。随着信息时代的来临&#xff0c;数据已经成为企业和组织的核心资产&#xff0c;而数据可视化则成为释放数据价值的重要工具。 在当今竞争激烈的商业环境中&#xf…

小赢科技,寻找金融科技核心价

如果说金融是经济的晴雨表&#xff0c;是通过改善供给质量以提高经济质量的切入口&#xff0c;那么金融科技公司&#xff0c;就是这一切行动的推手。上半年&#xff0c;社会经济活跃程度提高背后&#xff0c;金融科技公司既是奉献者&#xff0c;也是受益者。 8月29日&#xff0…

数据艺术:精通数据可视化的关键步骤

数据可视化是将复杂数据转化为易于理解的图表和图形的过程&#xff0c;帮助我们发现趋势、关联和模式。同时数据可视化也是数字孪生的基础&#xff0c;本文小编带大家用最简单的话语为大家讲解怎么制作一个数据可视化大屏&#xff0c;接下来跟随小编的思路走起来~ 1.数据收集和…

华为云Stack的学习(四)

五、Service OM资源管理 1.Service OM简介 1.1 Service OM介绍 在华为云Stack解决方案中&#xff0c;Service OM是FusionSphere OpenStack的操作管理界面&#xff0c;是资源池&#xff08;计算、存储、网络&#xff09;以及基础云服务的管理工具。 1.2 Service OM定位 Serv…

Apifox(1)比postman更优秀的接口自动化测试平台

Apifox介绍 Apifox 是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台&#xff0c;定位 Postman Swagger Mock JMeter。通过一套系统、一份数据&#xff0c;解决多个系统之间的数据同步问题。只要定义好 API 文档&#xff0c;API 调试、API 数据 Mock、API 自…

Mysql数据库(3)—架构和日志

Mysql的架构设计 Mysql分为Server层和存储引擎层&#xff1a; Server层 主要包括连接器、查询缓存、分析器、优化器、执行器等&#xff0c;涵盖 MySQL 的大多数核心服务功能&#xff0c;以及所有的内置函数&#xff08;如日期、时间、数学和加密函数等&#xff09;&#xff…

【GitHub 个人主页】适应于初学者的自定义个人主页设置

▚ 00 自定义GitHub主页的教程 &#x1f341; 【保姆级教程】手把手教你用github制作学术个人主页&#xff08;学者必备&#xff09; ▚ 01 优秀案例 1.1 添加Stats &#x1f383; 网址为&#xff1a;Stats & Most Used Langs

【一等奖方案】大规模金融图数据中异常风险行为模式挖掘赛题「NUFE」解题思路

第十届CCF大数据与计算智能大赛&#xff08;2022 CCF BDCI&#xff09;已圆满结束&#xff0c;大赛官方竞赛平台DataFountain&#xff08;简称DF平台&#xff09;正在陆续释出各赛题获奖队伍的方案思路&#xff0c;欢迎广大数据科学家交流讨论。 本方案为【大规模金融图数据中…

pandas数据分析之数据绘图

一图胜千言&#xff0c;将信息可视化&#xff08;绘图&#xff09;是数据分析中最重要的工作之一。它除了让人们对数据更加直观以外&#xff0c;还可以帮助我们找出异常值、必要的数据转换、得出有关模型的想法等等。pandas 在数据分析、数据可视化方面有着较为广泛的应用。本文…

使用MDK5的一些偏僻使用方法和谋个功能的作用

程序下载后无法运行 需要勾选如下库&#xff0c;是优化后的库&#xff1b; MicroLib和标准C库之间的主要区别是: 1、MicroLib是专为深度嵌入式应用程序而设计的。 2、MicroLib经过优化&#xff0c;比使用ARM标准库使用更少的代码和数据内存。 3、MicroLib被设计成在没有操作…

Windows安装配置Rust(附CLion配置与运行)

Windows安装配置Rust&#xff08;附CLion配置与运行&#xff09; 前言一、下载二、安装三、配置标准库&#xff01;&#xff01;&#xff01;四、使用 CLion 运行 rust1、新建rust项目2、配置运行环境3、运行 前言 本文以 windows 安装为例&#xff0c;配置编译器为 minGW&…

Linux知识点 -- Linux多线程(四)

Linux知识点 – Linux多线程&#xff08;四&#xff09; 文章目录 Linux知识点 -- Linux多线程&#xff08;四&#xff09;一、线程池1.概念2.实现3.单例模式的线程池 二、STL、智能指针和线程安全1.STL的容器是否是线程安全的2.智能指针是否是线程安全的 三、其他常见的各种锁…

Shiro整合SpringBoot,实战下的应用场景

文章目录 前言一、springBootshiro环境准备1.数据库2.ssmp环境搭建3.实体类4.三层搭建5.初始化测试数据 二、Shiro过滤器1.Shiro认证过滤器2.Shiro授权过滤器 三、springBootshiro身份认证1.创建Realm,重写认证方法doGetAuthenticationInfo2.创建shiro配置类3.Postman测试 四、…

财报解读:迈向高端化,珍酒李渡如何持续讲好品牌故事?

2023年上半年&#xff0c;尤其是第二季度&#xff0c;白酒行业淡季属性较为明显。对于市场情况&#xff0c;中国酒业协会《2023中国白酒市场中期研究报告》也有所披露&#xff1a;约40.91%的受访者反馈春节后平日的白酒消费量有所减少&#xff0c;约31.82%的受访者反馈五一期间…

python调用git出错:ImportError: Failed to initialize: Bad git executable.

报错信息 #报错信息 Traceback (most recent call last): File “”, line 1, in File “C:\Python27\lib\site-packages\git_init_.py”, line 85, in raise ImportError(‘Failed to initialize: {0}’.format(exc)) ImportError: Failed to initialize: Bad git executab…