電話號碼的字母組合


export default (str) => {
  // 創建電話號碼鍵盤映射
  let map = ['', 1, 'abc', 'def', 'ghi', 'jkl', 'mno', 'pqrs', 'tuv', 'wxyz']
  // 把輸入字符串按單字符分隔變成數組,234=>[2,3,4]
  let num = str.split('')
  // 保存鍵盤映射後的字母內容,如 23=>['abc','def']
  let code = []
  num.forEach(item => {
    if (map[item]) {
      code.push(map[item])
    }
  })
  let comb = (arr) => {
    // 臨時變量用來保存前兩個組合的結果
    let tmp = []
    // 最外層的循環是遍歷第一個元素,裏層的循環是遍歷第二個元素
    for (let i = 0, il = arr[0].length; i < il; i++) {
      for (let j = 0, jl = arr[1].length; j < jl; j++) {
        tmp.push(`${arr[0][i]}${arr[1][j]}`)
      }
    }
    arr.splice(0, 2, tmp)
    if (arr.length > 1) {
      comb(arr)
    } else {
      return tmp
    }
    return arr[0]
  }
  return comb(code)
}

相關文章
相關標籤/搜索