UNPKG

next_permutation

Version:

`next_permutation`是一个全排列功能的函数,可以接收一个字符串s和数字n,可以返回s在全排列中的n步后的字符串(如果已到最后一个排列,则返回最后一个)

58 lines (56 loc) 1.29 kB
var permutation = function (arr) { let start = 0 let end = arr.length - 1 let isEnd = false // 从后往前找到第一个非升序的元素A for (let i = end; i > 0; i--) { if (arr[i - 1] < arr[i]) { start = i - 1 break } else if (i - 1 === 0) { isEnd = true break } } if (isEnd) { return true } // 从后往前,找到第一个比元素A大的元素B,交换AB for (let i = end; i > start; i--) { if (arr[i] > arr[start]) { let temp = arr[i] arr[i] = arr[start] arr[start] = temp break } } // 将A往后的元素逆序 start += 1 while (start < end) { let temp = arr[start] arr[start] = arr[end] arr[end] = temp start += 1 end -= 1 } // 返回是否已经是最后一个排列 return false } var next_permutation = function (str, steps = 1) { if (isNaN(steps) || steps < 1) { throw Error('steps must be a valid number') } str += '' if (!str) { throw Error('str must be a valid string') } steps = parseInt(steps) let arr = str.split('') for (let i = 1; i <= steps; i++) { if (permutation(arr)) { break } } return arr.join('') } module.exports = next_permutation;