1. 程式人生 > 遊戲 >科樂美《e棒球實況力量棒球2021大滿貫》公佈新影像

科樂美《e棒球實況力量棒球2021大滿貫》公佈新影像

題目來源:劍指 Offer 38. 字串的排列

輸入一個字串,打印出該字串中字元的所有排列。

你可以以任意順序返回這個字串陣列,但裡面不能有重複元素。

方法一:回溯

/**
 * @param {string} s
 * @return {string[]}
 */
var permutation = function(s) {
    let n = s.length;
    let perm = [];
    let res = [];
    let vis = [];
    let arr = Array.from(s).sort();
    var backTrack = function
(i) { if(i === n){ res.push( perm.join('')); return ; } for(let j=0;j<n;j++){ if(vis[j] || (j>0 && !vis[j-1] && arr[j-1] === arr[j]) ){ continue; } perm.push(arr[j]); vis[j]
= true; backTrack(i+1); perm.pop(); vis[j] = false; } } backTrack(0); return res; };
lets='abc'; console.log(s,permutation(s))
s='aca'; console.log(s,permutation(s))

方法二:下一個排列

/**
 * @param {string} s
 * @return {string[]}
 */
var permutation = function
(s) { let n = s.length; let res = []; let arr = Array.from(s).sort(); var nextPermutation = (a)=>{ let i = n - 2; while(i>=0 && a[i] >= a[i+1]){ i--; } if(i<0){ return false; } let j = n - 1; while(j>=0 && a[i]>=a[j]){ j--; } [a[i], a[j]] = [a[j], a[i]]; arr = [].concat(a.slice(0, i+1), a.slice(i+1).reverse()); return true; } do{ res.push(arr.join('')) }while(nextPermutation(arr)) return res; };

示例:

輸入:s = "abc"
輸出:["abc","acb","bac","bca","cab","cba"]

限制:

1 <= s 的長度 <= 8