牛客题解官 level
获赞
1.5W
粉丝
96.2W
关注
2
看过 TA
6845
清华大学
2019
Java
IP属地:北京
牛客题解小达人~
私信
关注
2022-04-22 12:29
清华大学 Java
题目主要信息:  给定一组可能有重复数字的数组,输出该数组的全部排列 输出结果按照字典序升序排列  举一反三: 学习完本题的思路你可以解决如下题目: BM55. 没有重复项数字的全排列 BM58. 字符串的排列 BM60. 括号生成 递归+回溯(推荐使用) 知识点:递归与回溯 递归是一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解。因此递归过程,最重要的就是查看能不能讲原本的问题分解为更小的子问题,这是使用递归的关键。 如果是线型递归,子问题直接回到父问题不需要回溯,但是如果是树型递归,父问题有很多分支,我...
morphy:这个地方很有意思 楼上几个评论认为题解错了,我认为题解没错,先说结论:二者皆可。可自行提交试试,都能通过。两种写法结果集是一样的,只是每一项添加到结果集的时机不同。 这里最后一个条件visit[i-1] 也可以写成!visit[i-1] 1. 写visit[i-1] 比如1 2 2这个数组,会导致在(第二层)第一次遍历到中间的2时,遍历到第二个2时,直接跳过了,不会加入到list,在(第三层)第一次遍历2时,此时中间的2已经标记为false,才会加入到list中,答案是对的 2. 写!visit[i-1] 与上面相反,这样的含义是:因为数组最开始已经被我们排序,所以相等的数字一定挨着,比如两个2,在处理第二层的时候,前面的2肯定先用,后面的2后用,注意这里“用过”的含义不是遍历过,在用后面2的时候,前面2已经置为false,因此这里用!visit[i-1]代表前面已经用过,而不是遍历过
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务