笔试三道算法题(难度依次递增) 1.有重复字符串(全小写)全排列个数。(易) 组合数学问题:有重集合全排列数(n!/(n1!...nk!)) 例如:abb=>{abb,bab,bba}个数为3,等价于3!/(1!*2!) = 6/(1*2) = 3 2.长度为M的字符串(全小写),去掉K个字符返回字 ...
分类:
其他好文 时间:
2020-05-01 01:00:51
阅读次数:
116
给定一个可包含重复数字的序列,返回所有不重复的全排列 这题与上题的全排列问题类似,问题在于如何将重复序列排除在外。 这里就需要剪枝思想,即去掉多余的子树。 我们先看图,令nums=[1,1`,2] 图中可以看出,[1 ]节点选择子节点时与[1]节点选择时一致,故应该去除。类推。 再看如何判断剪枝: ...
分类:
其他好文 时间:
2020-04-30 13:58:16
阅读次数:
54
问题:给定一个 没有重复 数字的序列,返回其所有可能的全排列 全排列问题实际可以看作是树形结构 而dfs算法在树形结构中的应用就是回溯算法。 接下来详细解释回溯算法的思想: 如图所示:在本题中,树形结构的根节点为空,根节点的第一个子节点通过遍历找到[1],继续遍历找到[1]的子节点[2],[2]的子 ...
分类:
编程语言 时间:
2020-04-30 12:03:09
阅读次数:
102
什么是回溯 在求解诸如八皇后、全排列等问题时,我们通常使用深度优先搜索dfs在解空间内搜索满足条件的解,dfs的搜索过程可以看做是在一棵搜索树上遍历的过程。例如,求数字[1,2,3]的全排列的搜索树如下: 当我们搜索到树的深层向浅层返回的过程就是回溯。 (我认为可以这样理解:从上往下搜索是递归,从下 ...
分类:
编程语言 时间:
2020-04-25 23:13:57
阅读次数:
105
"Beautiful Now" 题意 给出一个最大为10^9的数字n,以及一个k,你最多交换n中任意两个位置的数字k次,问形成的最大数字和最小数字。 思路 看到这题,我靠这题暴力交换一下,不难啊,咋没人做。。 后来发现是我菜了,贪心写完成功WA了,比如这个样例970970 2,最小值不对。 正解是暴 ...
分类:
其他好文 时间:
2020-04-25 16:56:44
阅读次数:
57
题目描述 给定一个可包含重复数字的序列,返回所有不重复的全排列。 示例: 题目描述: https://leetcode cn.com/problems/permutations ii/ 做这题之前可以先做一下 "全排列" 。 思路 这题和 "全排列" 基本是一样的。这题中的数组可能包含重复的数字,所 ...
分类:
其他好文 时间:
2020-04-25 12:55:45
阅读次数:
49
问题描述:给定一个 没有重复 数字的序列,返回其所有可能的全排列。 class Solution { public: void PT(vector<vector<int>>& res, const vector<int>& nums, vector<bool>& num, vector<int>& ...
分类:
其他好文 时间:
2020-04-25 10:43:32
阅读次数:
64
方法一: 最原始,最暴力,耗时4秒,但是是最好想的思路。 生成1~9的全排列。对于每个全排列,依次枚举a,b,c的位数。枚举三个数的位数时,就相当于在9个数形成的8个空里,插入俩隔板。 所以时间复杂度大致是全排列个数9!乘以8个空里选俩的组合数:c(8,2)。 估计是10,160,640。不过按电脑 ...
概述 康托展开是一个全排列到一个自然数的双射。设有n个数(1,2,3,4,…,n),可以有组成不同(n!种)的排列组合,康托展开表示的就是是当前排列组合在n个不同元素的全排列中的名次。 康托展开 公式 $X = a[n] (n 1)! + a[n 1] (n 2)! + a[n 2] (n 3)! ...
分类:
其他好文 时间:
2020-04-21 23:58:18
阅读次数:
109
问题 描述: 将一组整数输入到数组p,输出p从小到大的全排列,p的元素可重叠 代码描述: 1 //从小到大可重排列 2 #include<stdio.h> 3 int A[20]; 4 int p[20]; 5 int n; 6 7 void sort(int n,int *p) 8 { 9 for ...
分类:
编程语言 时间:
2020-04-19 13:14:45
阅读次数:
77