784. 字母大小写全排列 & 17. 电话号码的字母组合

题目:给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。返回所有可能得到的字符串集合。

看题目这是一个回溯算法题,但是本文并没有采用回溯算法,而是使用了空间换时间的思路。开辟一个矩阵,存储每一位可能的值。然后从前往后集合组装。

 

/**
 * @param {string} S
 * @return {string[]}
 */
var letterCasePermutation = function(S) {
  var len = S.length;
  if(len === 0) return [];
    
  var collection = [];
  for(let index =0; index<len;index++){
     let l=S[index]; 
     if(Number(l) >=0){
         collection.push([l]);
     }else{
         collection.push([l.toLowerCase(), l.toUpperCase()]);
     }
  }
  
  var result = collection[0];
    
  for(let i = 1; i< len;i++){
      var possibleL = collection[i];
      var backup = result;
      result = result.map(item => item + possibleL[0]);
      for(let j=1;j < possibleL.length;j++){
          result = result.concat(backup.map(item => item + possibleL[j]));
      }
  }
  
  return result;
    
};

 

同理的还有 17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

/**
 * @param {string} digits
 * @return {string[]}
 */
var letterCombinations = function(digits) {
   var collection = [
       ["a","b","c"],
       ["d","e","f"],
       ["g","h","i"],
       ["j","k","l"],
       ["m","n","o"],
       ["p","q","r","s"],
       ["t","u","v"],
       ["w","x","y","z"]       
   ]
   
   var len =  digits.length;
   if(len===0) return [];
   var result = collection[digits[0]-2];
   for(let i = 1; i<len ; i++){
       var possibleValues = collection[digits[i]-2];
       var backup = result;
       result = result.map(item=>item+possibleValues[0]);
       for(let j=1;j<possibleValues.length;j++){
           result=result.concat(backup.map(item=>item+possibleValues[j]));
       } 
   }

   return result;
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值