LaN666 level
获赞
2679
粉丝
53
关注
8
看过 TA
207
门头沟学院
2022
golang
IP属地:广东
心如澄澈水
私信
关注
2021-07-21 08:56
已编辑
门头沟学院 golang
题目思路:这道题目跟没有重复项数字的所有排列 的做法其实是类似的,只不过区别在于有了重复的数字,如果不加以处理,还是按照原来的方法去做的话,那么就可能会出现重复的结果。 例如:[1,1,2]要是利用原先的做***算出两个[1,1,2],虽然是第一个1和第二个1,但是结果都是112。 所以要避免上面出现的结果,解决这道题目,我们可以利用一个mark数组在标记当前元素是否已经被选择过了,从而避免得到重复的排列。 回溯 import java.util.*; public class Solution { //用于标记是否访问过 boolean []mark; publi...
A1L3N:排序后11123,如果当前到了num[3](第一个2)或num[4](第一个3)的时候肯定不用判断之前有没有用过,所以只用在num[i]=num[i-1]时判断。 这个时候如果mark[i-1]为true,因为代码只有在遍历过但还没有回溯的时候mark[i-1]才会为true,所以为true只会是上一层的选择而不影响本层、即本层选择这个在排序后重复的值是实际上第一次在这一层遍历这个值。 如果mark[i-1]=false但是却已经到了num[i]这个值了只能说明mark[i-1]不是上一层使用的而是同一层前一个循环使用的,即前一次循环已经选择过了本次直接跳过。 本次跳过后本次的mark[i]一直保持为false,这样到了mark[i+1]也能同理辨别出本层是否已经选择过了
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务