9宮格鍵盤全排列

某天下午忙的眼到爆,茶歇的時候突然聊起算法,同事提到寫個9宮格鍵盤下的英文字符全排列。嗯。。。

第二天老哥發(fā)來了Python的遞歸實現(xiàn),十分精簡玄妙。

Challenge Accepted!

我來個循環(huán)的吧,直接上代碼:

C#循環(huán)的實現(xiàn)


using System;
using System.Collections.Generic;

public class Test
{
  public static void Main()
  {
    var test = new Test();
    test.Permutation("234");
    test.Print();
  }

  static Dictionary<string,string> KeyMap = new Dictionary<string,string>{
    {"2","abc"},
    {"3","def"},
    {"4","ghi"},
    {"5","jkl"},
    {"6","mno"},
    {"7","pqrs"},
    {"8","tuv"},
    {"9","wxyz"},
  };
    
  string[] OutPut;
  
  void Permutation(string input)
  {
    var repeatArr = new int[input.Length];
    var inputArr = input.ToCharArray();
    var numberOfCombination = 1;
    
    for(int i = input.Length - 1; i >= 0 ; i--)
    {
      var str = KeyMap[inputArr[i].ToString()];
      repeatArr[i] = numberOfCombination;
      numberOfCombination = numberOfCombination * str.Length;
    }
    
    OutPut = new string[numberOfCombination];

    for(int x = 0; x < input.Length; x++)
    {
      var letterPointer = 0;
      var count = 0;
      var letters = KeyMap[inputArr[x].ToString()];

      for(int y = 0; y < numberOfCombination; y++)
      {    
        var lettersArr = letters.ToCharArray(); 
        var letter = lettersArr[letterPointer];
        
        OutPut[y] += letter.ToString();
        count++;

        if(count == repeatArr[x])
        {
          count = 0;
          letterPointer++;
          if(letterPointer == lettersArr.Length)
          {
            letterPointer = 0;
          }
        }
      }
    }
  }
  
  void Print()
  {
    for(int i = 0; i < OutPut.Length; i++)
    {
      Console.WriteLine(OutPut[i]);
    }
  }

}

挑戰(zhàn)達成!

過兩天懶勁過了把解析補上嗯嗯,先立flag

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容