牛客NC367 第K个n的排列【困难 dfs,全排列问题 Java/Go/PHP/C++】

题目

题目链接:

https://www.nowcoder.com/practice/1595969179464e4c940a90b36abb3c54

思路

复制代码
	全排列问题
	本文提供的答案在力扣同一道题60. 排列序列,超时了
	但是截止文章发表日,牛客上是能通过全部测试用例的

Java代码

php 复制代码
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @param k int整型
     * @return string字符串
     */
    public String KthPermutation (int n, int k) {
        int[] arr = new int[n];
        for (int i = 0; i < n ; i++) {
            arr[i] = i + 1;
        }

        List<String> ll = new ArrayList<>();
        dfs(arr, 0, ll);
        Collections.sort(ll);
        return ll.get(k - 1);

    }

    public void dfs(int[] arr, int idx, List<String> ll) {
        if (idx == arr.length) {
            StringBuilder sb = new StringBuilder();
            for (int i : arr) {
                sb.append(i);
            }

            ll.add(sb.toString());
            return;
        }

        for (int i = idx; i < arr.length ; i++) {

            swap(arr, idx, i);
            dfs(arr, idx + 1, ll);
            swap(arr, idx, i);
        }
    }

    public void swap(int[] arr, int i, int j) {
        int t = arr[i];
        arr[i] = arr[j];
        arr[j] = t;
    }
}

Go代码

go 复制代码
package main

import (
    "sort"
    "bytes"
    "strconv"
)

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param n int整型
 * @param k int整型
 * @return string字符串
 */
func KthPermutation(n int, k int) string {
	//全排列问题
	ll := []string{}
	arr := make([]int, n)
	for i := 0; i < n; i++ {
		arr[i] = i + 1
	}
	dfs(arr, 0, &ll)
	sort.Strings(ll)
	return ll[k-1]
}

func dfs(arr []int, idx int, ll *[]string) {
	if idx == len(arr) {
		var bt bytes.Buffer
		for i := 0; i < len(arr); i++ {
			bt.WriteString(strconv.Itoa(arr[i]))
		}

		*ll = append(*ll, bt.String())
	} else {
		for i := idx; i < len(arr); i++ {
			swap(arr, i, idx)
			dfs(arr, idx+1, ll)
			swap(arr, i, idx)
		}
	}
}

func swap(arr []int, i, j int) {
	t := arr[i]
	arr[i] = arr[j]
	arr[j] = t
}

PHP代码

php 复制代码
<?php


/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @param k int整型 
 * @return string字符串
 */
function KthPermutation( $n ,  $k )
{
       //全排列问题
    $ll =[];
    $arr = [];
    for($i=0;$i<$n;$i++){
        $arr[$i] = $i+1;
    }

    dfs($arr,0,$ll,$n);

    sort($ll);

    return $ll[$k-1];
}


function dfs($arr,$idx,&$ll,$size){
    if($idx == count($arr)){
        $str='';
        for($i=0;$i<$size;$i++){
            $str.=$arr[$i];
        }

        $ll[count($ll)] = $str;
    }else{
        for($i=$idx;$i<$size;$i++){
            swap($arr,$i,$idx);
            dfs($arr,$idx+1,$ll,$size);
            swap($arr,$i,$idx);
        }
    }
}

function swap(&$arr,$i,$j){
    $t = $arr[$i];
    $arr[$i] =$arr[$j];
    $arr[$j] = $t;
}

C++代码

cpp 复制代码
class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @param k int整型
     * @return string字符串
     */
    string KthPermutation(int n, int k) {
        //全排列问题
        vector<string> ll;
        vector<int> arr(n);
        for (int i = 0; i < n; i++) {
            arr[i] = i + 1;
        }

        dfs(arr, 0, &ll, n);
        std::sort(ll.begin(), ll.end());

        return ll[k - 1];

    }

    void dfs(vector<int> arr, int idx, vector<string>* ll, int size) {
        if (idx == size) {
            std::stringstream ss;
            for (int i = 0; i < size; i++) {
                ss << std::to_string(arr[i]);
            }

            std::string combined_string = ss.str();
            ll->push_back(combined_string);
        } else {
            for (int i = idx; i < size; i++) {
                int t = arr[i];
                arr[i] = arr[idx];
                arr[idx] = t;
                dfs(arr, idx + 1, ll, size);
                //恢复现场
                int t1 = arr[i];
                arr[i] = arr[idx];
                arr[idx] = t1;
            }
        }
    }
};
相关推荐
别动我齐刘海30 分钟前
机器人 C++ / 系统联调补强2——异常处理、Protobuf
linux·c++·人工智能·学习·算法·机器学习·机器人
荆棘鸟智能1 小时前
短历时洪水预报算法实践:水文模型与 LightGBM 残差订正融合
人工智能·算法·机器人
葫三生2 小时前
关于三生原理系列被技术开发社区批量收录或引发策展边界讨论的一种思考
大数据·人工智能·深度学习·算法·机器学习·数据挖掘·开源
catcatuncle2 小时前
OpenWorkBuddy 部署排错手册:从源码启动到自己搭一个给团队用,七个最容易卡住的地方
算法
avi91112 小时前
【AI教人】在Inspector显示所有Delegate-Odin Inspector之三
java·前端·算法·delegate·inspector·editor扩展·unity editor
淡海水2 小时前
06-02-源码-增量标记算法实现
算法·unity·c#·gc
碧海银沙音频科技研究院2 小时前
实现炬芯ATS308X的usb cdc 串口IAP 固件升级功能实现
人工智能·嵌入式硬件·深度学习·算法
云淡风轻~窗明几净2 小时前
角谷猜想与百度AI的对话dialog(原始稿)
人工智能·算法·机器学习·图论
小O的算法实验室3 小时前
ASOC,分层分数阶粒子群算法+无人机电场路径规划
算法
重生之小比特4 小时前
【算法拾光】二分查找|搜索插入位置 + x 的平方根
算法