556. 下一个更大元素 III

给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n。如果不存在这样的32位整数,则返回-1。

  • 示例 1:

    输入: 12

    输出: 21
  • 示例 2:

    输入: 21

    输出: -1

代码

  1. class Solution {
  2. public int nextGreaterElement(int n) {
  3. int[] array = transfer(n);
  4. /*
  5. 求出的下一个全排列可能会超出int类型的范围
  6. 这并不符合得出的答案是32位的结果
  7. 所以我将结果用long保存
  8. 如果它超出了int的表示范围
  9. 就返回-1
  10. */
  11. long result = nextArray(array);
  12. if (result > Integer.MAX_VALUE) {
  13. return -1;
  14. }
  15. return (int)result;
  16. //return nextArray(array);
  17. }
  18. public long nextArray(int[] array) {
  19. int length = array.length;
  20. /*
  21. * 第一步,寻找最后一个正序
  22. * 寻找方法 : 从后向前找
  23. */
  24. int i;
  25. for (i = length-1; i > 0 ; i--) {
  26. if (array[i-1] < array[i]) {
  27. break;
  28. }
  29. }
  30. /*
  31. * 如果没找到,也就是到了最后的一个
  32. */
  33. if (i == 0) {
  34. return -1;
  35. }
  36. /*
  37. *第二步,从后往前找一个比array[i-1]大的第一个数字.
  38. */
  39. int j;
  40. for (j = length-1; j > i; j --) {
  41. if (array[j] > array[i-1]) {
  42. break;
  43. }
  44. }
  45. /*
  46. 第三步,交换array[i-1],array[j]
  47. */
  48. int temp = array[i-1];
  49. array[i-1] = array[j];
  50. array[j] = temp;
  51. /*
  52. 最后一步,把i-1后面(从i-2开始至length-1)的序列反序
  53. */
  54. while (i < length-1) {
  55. temp = array[i];
  56. array[i] = array[length-1];
  57. array[length-1] = temp;
  58. i ++;
  59. length --;
  60. }
  61. /*
  62. 反序完毕即为一次排列结束
  63. 得到的序列就是下一个全排列
  64. */
  65. long result = 0;
  66. for (int index = 0; index < array.length; index++) {
  67. result *= 10;
  68. result += array[index];
  69. }
  70. return result;
  71. }
  72. private int[] transfer(int n) {
  73. String str = Integer.toString(n);
  74. int[] arr = new int[str.length()];
  75. for (int i = 0; i < arr.length; i++) {
  76. arr[i] = Integer.parseInt(String.valueOf(str.charAt(i)));
  77. }
  78. return arr;
  79. }
  80. }

556. 下一个更大元素 III的更多相关文章

  1. LeetCode 556. 下一个更大元素 III(Next Greater Element III)

    556. 下一个更大元素 III 556. Next Greater Element III 题目描述 给定一个 32 位正整数 n,你需要找到最小的 32 位整数,其与 n 中存在的位数完全相同,并 ...

  2. Java实现 LeetCode 556 下一个更大元素 III(数组的翻转)

    556. 下一个更大元素 III 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n.如果不存在这样的32位整数,则返回-1. 示例 1: 输入: 1 ...

  3. Leetcode 556.下一个更大元素III

    下一个更大元素III 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n.如果不存在这样的32位整数,则返回-1. 示例 1: 输入: 12 输出: ...

  4. [Swift]LeetCode556. 下一个更大元素 III | Next Greater Element III

    Given a positive 32-bit integer n, you need to find the smallest 32-bit integer which has exactly th ...

  5. LeetCode 503. 下一个更大元素 II(Next Greater Element II)

    503. 下一个更大元素 II 503. Next Greater Element II 题目描述 给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素.数字 ...

  6. LeetCode 496. 下一个更大元素 I(Next Greater Element I) 35

    496. 下一个更大元素 I 496. Next Greater Element I 题目描述 给定两个没有重复元素的数组 nums1 和 nums2,其中 nums1 是 nums2 的子集.找到  ...

  7. [Swift]LeetCode496. 下一个更大元素 I | Next Greater Element I

    You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of n ...

  8. [Swift]LeetCode503. 下一个更大元素 II | Next Greater Element II

    Given a circular array (the next element of the last element is the first element of the array), pri ...

  9. Leetcode 496. 下一个更大元素 I

    1.题目描述 给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集.找到 nums1 中每个元素在 nums2 中的下一个比其大的值. nums1 中数字  ...

随机推荐

  1. java面试题2-自己整合的

    1.HashMap的底层实现原理 HashMap是数组+链表组成的实现了Map.Cloneable.Serializable接口,继承了AbstractMap类 HashMap是否线程安全? Hash ...

  2. Prometheus-Alertmanager告警对接到企业微信

    之前写过将Prometheus的监控告警信息通过Alertmanager推送到钉钉群. 最近转移了阵地,需要将Prometheus监控告警信息推送到企业微信群,经过两天的摸索,以及查了网上的一些资料, ...

  3. Urule开源版系列5——RuleSetParser解析过程

    接上期Urule开源版系列4--Core包核心接口之规则解析过程 之前源码到了Parser,这期详细解析下RuleSetParser的解析过程 1.主流程 特殊处理一个属性 循环处理元素 当元素名称是 ...

  4. vue移动端记录列表滚动如何快速找到是哪个元素产生的滚动

    使用下面的代码粘贴到调试工具中运行一下,然后滚动页面,就可以看到是哪个元素产生的滚动了 function findscroller(element) { element.onscroll = func ...

  5. gateway(二、过滤器)

    过滤器其实是路由转发+过滤器 自定义过滤器 首先创建一个类继承下边两个类,实现过滤器 然后在启动项中通过创建bean的方式创建路由器 @Componentpublic class TimeFilter ...

  6. Spring ioc 源码分析之--beanFactory.registerResolvableDependency()方法

    背景: 在spring ioc refresh()方法中,看到了如下逻辑: 要理解该逻辑的原理,先看场景:有个接口InterFaceA,它有2个实现类A1和A2 那么,如果一个类C 依赖了InterF ...

  7. 基于Excel参数化你的Selenium2测试-xlrd

    本篇文章转载至苦叶子:   前言 今天我们就如何使用xlrd模块来进行python selenium2 + excel自动化测试过程中的参数化进行演示说明,以解决大家在自动化测试实践过程中参数化的疑问 ...

  8. Optimisation

    https://www.cnblogs.com/wuyudong/p/writing-efficient-c-and-code-optimization.html 1 不要过多使用 stack ,尽量 ...

  9. JS进阶系列-JS执行期上下文(一)

    ❝ 点赞再看,年薪百万 本文已收录至https://github.com/likekk/-Blog欢迎大家star,共同进步.如果文章有出现错误的地方,欢迎大家指出.后期将在将GitHub上规划前端学 ...

  10. python opencv 读取图片 返回图片某像素点的b,g,r值

    转载:https://blog.csdn.net/weixin_41799483/article/details/80884682 #coding=utf-8   #读取图片 返回图片某像素点的b,g ...