次のように内容は次のとおりです。
アルファベットボードでは、我々は位置の開始
(0, 0)
文字に対応します、board[0][0]
。ここで
board = ["abcde", "fghij", "klmno", "pqrst", "uvwxy", "z"]
、以下の図に示すように。我々は、次の動きをすることがあります。
'U'
位置がボード上に存在する場合は、1行までの私たちの位置を移動させます。'D'
位置がボード上に存在する場合は、1行下に私たちの位置を移動させます。'L'
位置がボード上に存在するならば、我々の立場は一つの列を左に移動します。'R'
位置がボード上に存在する場合は、右の1列私たちの位置を移動させます。'!'
文字を追加しboard[r][c]
、当社の現在の位置に(r, c)
答えること。(ここでは、ボード上に存在する唯一の位置は、それらの文字と位置です。)
私たちの答えは同じになり移動のシーケンスを返し
target
動きの最小数でを。あなたはそうする任意のパスを返すことがあります。
例1:
入力:ターゲット= "すご腕" 出力: "!DDR UURRR !! DDD!"例2:
入力:= "コード"ターゲット 出力: "!!!!RR DDRR UUL R"
制約:
1 <= target.length <= 100
target
英語のみの小文字の文字で構成されています。
ソリューションの概要:表全体を座標軸として抽象化されているこの問題は困難ではない、例えば、(0,0)座標、Lは、(2,1)の座標は、Lへのパスは、左右方向になっています時間(X座標マイナスLのx座標)、最大移動の移動方向とダウン回(Lマイナス座標のy座標)。ここで注意すべきことの一つは、それが開始またはz zから到着しているかどうか、uは到着からのみ通過しなければならないので、開始または終了文字は、zがあり、zを経由しておくことはできません。
コードは以下の通りであります:
クラス溶液(オブジェクト): DEF :alphabetBoardPath(自己、ターゲット) "" " :型ターゲット:STR :RTYPE:STR """ ボード = [ " ABCDE "、" FGHIJ "、" klmno "、" PQRST "、「uvwxy " " Z " ] DIC = {} のための I における範囲(LEN(ボード))。 以下のための J で範囲(LEN(ボード[I])): DIC [ボード[I] [J] = (i、j)は 、X、Yは = 0,0 RES = '' のためのI にターゲット: X1、Y1 = DIC [I ] # もし I == ' Z ' : V = Y - Y1 もし V> 0: RES + = ' L ' * V 他: RES + = 'R ' *( - V)は 、V = X - X1 もし V> 0: RES + = 'は、Uは[ * V 他: RES + = ' D ' *( - V) 他: V = X - X1 もし V> 0: resが + = ' Uは' * V 他: RES + = ' D ' *( - V) V = Y - Y1 の場合 V> 0: RES + = ' L ' * V 他: RES + = ' R ' *( - v)の RES + = " !'の X、Y = X1、Y1の 戻り RES