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

Leetcode 下一个排列

在这里插入图片描述

首先理解整数的字典序,字典序排列总是优先让“较小的”元素出现在前面。字典序的排列规则类似于字典中的单词排列方式,从左到右逐位比较,较小的数字优先出现。按照正整数元素排列的字典序,如果将每个排列视为一个整数值,那么这些排列确实是以升序排列的。

例如,对于数组 [1, 2, 3, 4],字典序排列如下:

  1. [1, 2, 3, 4] → 1234
  2. [1, 2, 4, 3] → 1243
  3. [1, 3, 2, 4] → 1324
  4. [1, 3, 4, 2] → 1342
  5. [1, 4, 2, 3] → 1423
  6. [1, 4, 3, 2] → 1432
  7. [2, 1, 3, 4] → 2134
  8. [2, 1, 4, 3] → 2143
  9. [2, 3, 1, 4] → 2314
  10. [2, 3, 4, 1] → 2341
  11. [2, 4, 1, 3] → 2413
  12. [2, 4, 3, 1] → 2431
  13. [3, 1, 2, 4] → 3124
  14. [3, 1, 4, 2] → 3142
  15. [3, 2, 1, 4] → 3214
  16. [3, 2, 4, 1] → 3241
  17. [3, 4, 1, 2] → 3412
  18. [3, 4, 2, 1] → 3421
  19. [4, 1, 2, 3] → 4123
  20. [4, 1, 3, 2] → 4132
  21. [4, 2, 1, 3] → 4213
  22. [4, 2, 3, 1] → 4231
  23. [4, 3, 1, 2] → 4312
  24. [4, 3, 2, 1] → 4321

在这里插入图片描述

如果只有一个元素,下一个排列是其本身。

java 实现代码

class Solution {public void nextPermutation(int[] nums) {int n = nums.length;if(n < 2) return; //由于返回类型是void,所以如果只有一个元素,下一个排列是其本身。int i = n - 2; // i 是从右往左第一个两个相邻元素中前面的元素小于后面的元素时,前面这个元素的索引位置while(i >= 0 && nums[i] >= nums[i + 1]) {i--;}if(i >= 0) {//寻找比nums[i]大的最小元素int j = n - 1;//此时i右端所有元素相当于是逆序递减排列,//所以j从最右端开始遍历,第一个比i大的元素就是比nums[i]大的最小元素while(nums[j] <= nums[i]) {j--;}//交换nums[j] 和 nums[i]swap(nums, i, j); // swap交换数组nums下标i和j上的元素}//如果是字典序最大的排序此时, i == -1, i + 1 == 0reverse(nums, i + 1, n - 1); //理解从 i + 1 开始}private void reverse(int[] nums, int start, int end) {while(start < end) {swap(nums, start, end);start++;end--;}}private void swap(int[] nums, int i, int j) { //交换数组下标i和j上的元素int temp;temp = nums[i];nums[i] = nums[j];nums[j] = temp;}
}
http://www.lryc.cn/news/458735.html

相关文章:

  • WPF中的布局
  • 【Spring】Spring和SpringMVC为什么需要父子容器
  • Origin制图——双轴线图实现
  • 【算法系列-哈希表】两个集合的交集问题
  • linux 效率化 - zsh + tmux
  • Python学习-函数
  • 点评项目-4-隐藏敏感信息、使用 redis 优化登录业务
  • Redis异步实现解析
  • matlab 相关
  • 从组会尴尬到学术突破:Transformer助力跨域推荐解析
  • 【Flutter、H5、Web?前端个人总结】分享从业经历经验、自我规范准则,纯干货
  • mysql主从配置
  • sklearn pipeline
  • springboot实现服务注册与发现
  • 美格智能亮相2024中国移动全球合作伙伴大会,共赢AI+时代
  • 【LeetCode】动态规划—309. 买卖股票的最佳时机含冷冻期(附完整Python/C++代码)
  • IDE启动失败
  • 【Kubernetes】常见面试题汇总(六十)
  • maven dependency中scope的取值类型
  • 线性代数在大一计算机课程中的重要性
  • 笔记本电脑按住电源键强行关机,对电脑有伤害吗?
  • 如何将 cryptopp库移植到UE5内
  • SpringBoot 集成GPT实战,超简单详细
  • 基于Langchain框架下Prompt工程调教大模型(LLM)[输入输出接口、提示词模板与例子选择器的协同应用
  • Vue基于vue-office实现docx、xlsx、pdf文件的在线预览
  • 哪个软件可以在线编辑ppt? 一口气推荐5个做ppt的得力助手!
  • Django学习笔记九:Django中间件Middleware
  • 原来自媒体高手都是这样选话题的,活该人家赚大钱,真后悔知道晚了
  • 胤娲科技:AI绘梦师——一键复刻梵高《星空》
  • 第18课-C++继承:探索面向对象编程的复用之道