题目描述幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。说明:解集不能包含重复的子集。示例:输入:nums=[1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]解题思路与代码其实这道题,一看就是属于子集问题,让你在一个N个数的集合里有多少符合条件的子集。回溯算法是一种试探性的搜索算法,它在解决某些组合问题,字节问题,排列问题等时非常有效,所以呢,这道题,我们就可以去用回溯法去解决。方法一:回溯法这里就用我最崇拜的carl哥的回溯三部曲模版,来带大家解这道题。第一步,找出回溯函数模板返回值第二步,确定回溯函数终止条件第三步,回
题目描述有重复字符串的排列组合。编写一种方法,计算某字符串的所有排列组合。示例1:输入:S=“qqe”输出:[“eqq”,“qeq”,“qqe”]示例2:输入:S=“ab”输出:[“ab”,“ba”]提示:字符都是英文字母。字符串长度在[1,9]之间。解题思路与代码这道题一看还是一道关于排列的问题。只要有关排列的问题,我们都可以通过回溯法去解决。方法一:回溯法+使用unordered_set数据结构进行去重如果没有做过《程序员面试金典(第6版)》面试题08.07.无重复字符串的排列组合(回溯算法,全排列问题)C++这道题的小伙伴,先去做一下这道题。这道题与上面链接的那道题非常像,只不过,这里字
旋转矩阵概述:给你一幅由N×N矩阵表示的图像,其中每个像素的大小为4字节。请你设计一种算法,将图像旋转90度。不占用额外内存空间能否做到?给定matrix=[[1,2,3],[4,5,6],[7,8,9]],原地旋转输入矩阵,使其变为:[[7,4,1],[8,5,2],[9,6,3]]给定matrix=[[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]],原地旋转输入矩阵,使其变为:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]方法一:nm矩阵思路:定义一个nm的空矩阵,依次循环替代即可。最后需要注意
题目解析设想有个机器人坐在一个网格的左上角,网格r行c列。机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍物)。设计一种算法,寻找机器人从左上角移动到右下角的路径。网格中的障碍物和空位置分别用1和0来表示。返回一条可行的路径,路径由经过的网格的行号和列号组成。左上角为0行0列。如果没有可行的路径,返回空数组。示例1:输入:[[0,0,0],[0,1,0],[0,0,0]]输出:[[0,0],[0,1],[0,2],[1,2],[2,2]]解释:输入中标粗的位置即为输出表示的路径,即0行0列(左上角)->0行1列->0行2列->1行2列->2行2列(右下角)说明:r和c的值均不超过1
题目解析设想有个机器人坐在一个网格的左上角,网格r行c列。机器人只能向下或向右移动,但不能走到一些被禁止的网格(有障碍物)。设计一种算法,寻找机器人从左上角移动到右下角的路径。网格中的障碍物和空位置分别用1和0来表示。返回一条可行的路径,路径由经过的网格的行号和列号组成。左上角为0行0列。如果没有可行的路径,返回空数组。示例1:输入:[[0,0,0],[0,1,0],[0,0,0]]输出:[[0,0],[0,1],[0,2],[1,2],[2,2]]解释:输入中标粗的位置即为输出表示的路径,即0行0列(左上角)->0行1列->0行2列->1行2列->2行2列(右下角)说明:r和c的值均不超过1
题目描述硬币。给定数量不限的硬币,币值为25分、10分、5分和1分,编写代码计算n分有几种表示法。(结果可能会很大,你需要将结果模上1000000007)示例1:输入:n=5输出:2解释:有两种方式可以凑成总金额:5=55=1+1+1+1+1示例2:输入:n=10输出:4解释:有四种方式可以凑成总金额:10=1010=5+510=5+1+1+1+1+110=1+1+1+1+1+1+1+1+1+1说明:你可以假设:0解题思路与代码这道题我拿到手上,就有了一种拿动态规划去解决它的冲动。所以让我们来看看这道题拿动态规划怎么去解决。方法一:动态规划第一步,拿到这道题,先分析dp数组的下标以及含义是什么