当前位置: 首页 > news >正文

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

题目

在这里插入图片描述
题目链接:
https://www.nowcoder.com/practice/1595969179464e4c940a90b36abb3c54

思路

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

Java代码

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代码

package mainimport ("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.Bufferfor 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/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @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++代码

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;}}}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Study--Oracle-03-Oracle19C--RAC集群部署
  • 掌握C++回调:按值捕获、按引用捕获与弱引用
  • NB65 第k轻的牛牛
  • windows下nginx配置https证书
  • 无人机监测系统:天空之眼,精准掌握地球脉动
  • osgearth 3.5 vs 2019编译
  • 【LeetCode 随笔】面试经典 150 题【中等+困难】持续更新中。。。
  • 使用cockpit管理服务器
  • 在 Visual Studio 2022 (VS2022) 中删除 Git 分支的步骤如下
  • 第十三期Big Demo Day聚焦Web3前沿,FaceN.AI项目路演揭幕创新技术
  • ClickHouse 24.4 版本发布说明
  • 基于hive的酒店价格数据可视化分析系统设计和实现
  • AcW木棒-XMUOJ恢复破碎的符咒木牌-DFS与剪枝
  • JVM(5):虚拟机性能分析和故障解决工具概述
  • WebSocket——相关介绍以及后端配置
  • ES6--对象的扩展
  • Fundebug计费标准解释:事件数是如何定义的?
  • JavaScript设计模式系列一:工厂模式
  • Java比较器对数组,集合排序
  • leetcode386. Lexicographical Numbers
  • log4j2输出到kafka
  • Python_OOP
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • scala基础语法(二)
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 阿里云Kubernetes容器服务上体验Knative
  • 半理解系列--Promise的进化史
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 计算机常识 - 收藏集 - 掘金
  • 排序算法学习笔记
  • 通过几道题目学习二叉搜索树
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 正则与JS中的正则
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 回归生活:清理微信公众号
  • #控制台大学课堂点名问题_课堂随机点名
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $NOIp2018$劝退记
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (篇九)MySQL常用内置函数
  • (十一)手动添加用户和文件的特殊权限
  • (四)鸿鹄云架构一服务注册中心
  • (四)软件性能测试
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (已解决)什么是vue导航守卫
  • .NET Reactor简单使用教程
  • .net 调用海康SDK以及常见的坑解释
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • .NetCore项目nginx发布
  • .NET关于 跳过SSL中遇到的问题
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [1159]adb判断手机屏幕状态并点亮屏幕
  • [C++初阶]vector的初步理解