JavaScript 中的排列

  1. 給定陣列的排列
  2. 給定字串的排列
JavaScript 中的排列

在 JavaScript 中,有 slicereducefiltersubstring 和更多方法來緩解置換給定字串或陣列的所有可能試驗的基本問題。

在這裡,我們將展示如何從給定的輸入中提取陣列和字串的組合。主要重點是將每個文字從陣列或字串中分開,並一一交換其他文字。

在以下部分中,我們將使用必要的程式碼示例詳細討論該過程。

給定陣列的排列

我們將初始化一個函式 permute,其中包含另一個函式 backtrack。將遞迴呼叫此函式 backtrack 以執行正確的組合集。

程式碼片段:

var permute = function(nums) {
  var result = [];
  var backtrack = (i, nums) => {
    if (i === nums.length) {
      result.push(nums.slice());
      return;
    }
    for (let j = i; j < nums.length; j++) {
      [nums[i], nums[j]] = [nums[j], nums[i]];
      backtrack(i + 1, nums);
      [nums[i], nums[j]] = [nums[j], nums[i]];
    }
  } backtrack(0, nums);
  console.log(result);
  return result;
};
permute([1, 2, 3]);

輸出:

陣列燙髮

這裡的主要動作定義了交換部分,我們在其中將每個文字彼此交換一次試驗(例如 [1,2,3])並提出可能的組合。

從試驗 [1,2,3],我們將得到 [1,2,3] & [1,3,2]。這部分將被執行,直到每個文字都得到檢查。

在切換到下一個試驗之前,我們通過再次交換返回到基本試驗(1,2,3)(因為最後一個組合是 [1,3,2])。這就是回溯的操作方式。

形成一棵樹以檢視可能的試驗,並且樹的長度等於陣列的長度。最初,我們執行一個 DFS 來解決這個問題,然後遞迴回溯過程來解決這個問題。

給定字串的排列

在字串的情況下,我們將首先拆分字串,然後我們將使用 reduce 方法通過遞迴呼叫 permutationString 函式來逐個連線可能的試驗。

程式碼片段:

var permutationString = str => {
  if (str.length <= 2)
    return str.length === 2 ? [str[0] + str[1], str[1] + str[0]] : [str];
  return str.split('').reduce(
      (accumulator, letter, i) => accumulator.concat(
          permutationString(str.slice(0, i) + str.slice(i + 1))
              .map(val => letter + val)),
      []);
};
console.log(permutationString('abcd'));

輸出:

string_perm

根據累加器功能,我們正在保留每個組合。

我們使用 slice 方法來鎖定某個字母表,並根據之前初始化的基本情況新增其餘的字母表。最後,輸出結果是所有預期模式的組合形式。

階乘公式推匯出方法排列,因此該問題的解決方案通常會遇到較大情況下的執行時錯誤。但是可以通過這種方式指導具有適當視覺化問題的基本推理。

Enjoying our tutorials? Subscribe to DelftStack on YouTube to support us in creating more high-quality video guides. Subscribe
Anika Tabassum Era avatar Anika Tabassum Era avatar

Era is an observer who loves cracking the ambiguos barriers. An AI enthusiast to help others with the drive and develop a stronger community.

LinkedIn Facebook

相關文章 - JavaScript Array