排列3.返回全排列中的第k个序列

该博客探讨如何解决返回全排列中第k个序列的问题,关注于数据结构和算法的应用。通过使用used数组确保序列无重复,并在达到指定序列k时返回结果。递归过程中利用StringBuffer存储并调整临时结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

返回第k个序列,序列是共有n个元素的集合中的全排列

首先这是一个排列问题,用used,然后序列中没有重复的元素,只是对集合进行排列而已,当进行到第k个时候直接返回即可。
如何到k的时候返回,可以设置一个string类型的res,只要有值了,则下面的递归都直接返回。用一个stringBuffer来存储temp结果,方法是append和deleteCharAt。

class Solution {
    String res="";
    int count=1;
    public String getPermutation(int n, int k) {
        boolean[] used=new boolean[n];
        StringBuffer buffer = new StringBuffer();
        core(n,k,used,buffer,0);
        return res;
    }
    public void core(int n,int k,boolean[] used,StringBuffer temp,int depth){
        if(res!=""){
            return; //依靠这个来摆脱到k之后的回溯。
        }
        if(depth==n){
            if(count==k){
                res=temp.toString(); //到k则给res赋值
            }else{
                count++;  
                                                                                           //不到k则count++,但不用管s             
            }
            return;  //到k就要return
        }
        for(int i=0;i<n;i++){//i从0到n,有n个分支
            if(!used[i]){//没有遍历过才进入
                temp.append(i+1);
                used[i]=true;
                core(n,k,used,temp,depth+1);
                temp.deleteCharAt(temp.length() - 1);
                used[i]=false;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值