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