全排列:不管是排列、子集还是组合,只要能够抽象出树型结构,就很好解决。全排列每层循环之所以从0开始,是因为要搜集的是叶子节点均由所有元素组成。因此,想要跳过已经选择过的元素,需要用到used数组来记录。
491.递增子序列
序列和组合/子集不同,元素之间的顺序不能改变,因此不能用排序+used的方法来去重。要判断是否重复,需要用数组记录本层选取过的元素,每次取一个元素都要检查其在数组里是否已经存在。另一个问题是需要跳过递减的元素,自然地想到要比较上一个选取的元素和现在的元素。由于无法排序,不能用nums[i-1]和nums[i]比较,可以创建一个栈,比较栈顶元素和该元素。