|
|
@@ -0,0 +1,20 @@
|
|
|
+func nextGreaterElement(n int) int {
|
|
|
+ runes := []rune(strconv.Itoa(n))
|
|
|
+ for n = len(runes) - 2; 0 <= n && runes[n+1] <= runes[n]; n-- {
|
|
|
+ }
|
|
|
+ if n == -1 {
|
|
|
+ return n
|
|
|
+ }
|
|
|
+ i := len(runes) - 1
|
|
|
+ for ; runes[i] <= runes[n]; i-- {
|
|
|
+ }
|
|
|
+ runes[n], runes[i] = runes[i], runes[n]
|
|
|
+ for n, i = n+1, len(runes)-1; n < i; n, i = n+1, i-1 {
|
|
|
+ runes[n], runes[i] = runes[i], runes[n]
|
|
|
+ }
|
|
|
+ n, _ = strconv.Atoi(string(runes))
|
|
|
+ if math.MaxInt32 < n {
|
|
|
+ return -1
|
|
|
+ }
|
|
|
+ return n
|
|
|
+}
|