[LeetCode] 556. Next Greater Element III

Posted aaronliu1991

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 556. Next Greater Element III相关的知识,希望对你有一定的参考价值。

下一个更大的元素III。版本三其实跟前两个版本几乎没什么关系,是一道找next permutation的题。题意是给一个整数,请找出Integer范围内用到相同数字但是比当前数字大的数字。例子,

Example 1:

Input: 12
Output: 21

 

Example 2:

Input: 21
Output: -1

如果想看怎么跑例子可以参见next permutation

时间O(n)

空间O(1) - 因为创建的数组最多只有32位,并不随着input变大

Java实现

 1 class Solution {
 2     public int nextGreaterElement(int n) {
 3         char[] res = ("" + n).toCharArray();
 4         int i = res.length - 2;
 5         while (i >= 0 && res[i + 1] <= res[i]) {
 6             i--;
 7         }
 8         if (i < 0) {
 9             return -1;
10         }
11         int j = res.length - 1;
12         while (j >= 0 && res[j] <= res[i]) {
13             j--;
14         }
15         swap(res, i, j);
16         reverse(res, i + 1);
17         long val = Long.parseLong(new String(res));
18         return val <= Integer.MAX_VALUE ? (int) val : -1;
19     }
20 
21     private void swap(char[] chars, int i, int j) {
22         char temp = chars[i];
23         chars[i] = chars[j];
24         chars[j] = temp;
25     }
26 
27     private void reverse(char[] chars, int start) {
28         int i = start;
29         int j = chars.length - 1;
30         while (i < j) {
31             swap(chars, i++, j--);
32         }
33     }
34 }

 

以上是关于[LeetCode] 556. Next Greater Element III的主要内容,如果未能解决你的问题,请参考以下文章

leetcode556—— Next Greater Element III (JAVA)

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

[LeetCode] 556. Next Greater Element III

Leetcode 556. Next Greater Element III

LeetCode#556-下一个更大元素-arraycopy用法

556. Next Greater Element III