Skip to content
Go back

1138-alphabet-board-path

1138 https://leetcode.cn/problems/alphabet-board-path/

直接模拟

struct Solution {}

use std::collections::HashMap;
impl Solution {
  pub fn alphabet_board_path(target: String) -> String {
    let mut cord: HashMap<char, [usize; 2]> = HashMap::from([
      ('a', [0, 0]),
      ('b', [0, 1]),
      ('c', [0, 2]),
      ('d', [0, 3]),
      ('e', [0, 4]),
      ('f', [1, 0]),
      ('g', [1, 1]),
      ('h', [1, 2]),
      ('i', [1, 3]),
      ('j', [1, 4]),
      ('k', [2, 0]),
      ('l', [2, 1]),
      ('m', [2, 2]),
      ('n', [2, 3]),
      ('o', [2, 4]),
      ('p', [3, 0]),
      ('q', [3, 1]),
      ('r', [3, 2]),
      ('s', [3, 3]),
      ('t', [3, 4]),
      ('u', [4, 0]),
      ('v', [4, 1]),
      ('w', [4, 2]),
      ('x', [4, 3]),
      ('y', [4, 4]),
      ('z', [5, 0]),
    ]);

    let mut base: [usize; 2] = [0, 0];

    let mut ret: Vec<u8> = Vec::new();

    for b in target.chars() {
      let dst = cord.get(&b).unwrap();

      if b == 'z' {
        (dst[1]..base[1]).for_each(|_| {
          ret.push('L' as u8);
        });
        (base[0]..dst[0]).for_each(|_| {
          ret.push('D' as u8);
        });
      } else if base[0] == 5 && base[1] == 0 {
        (dst[0]..base[0]).for_each(|_| {
          ret.push('U' as u8);
        });
        (base[1]..dst[1]).for_each(|_| {
          ret.push('R' as u8);
        });
      } else {
        let mut h: u8 = 'L' as u8;
        let mut cs: usize = dst[1];

        let mut ce: usize = base[1];
        if base[1] < dst[1] {
          h = 'R' as u8;
          cs = base[1];
          ce = dst[1];
        }
        let mut v: u8 = 'U' as u8;
        let mut rs: usize = dst[0];

        let mut re: usize = base[0];

        if base[0] < dst[0] {
          v = 'D' as u8;
          rs = base[0];
          re = dst[0];
        }
        (rs..re).for_each(|_| {
          ret.push(v);
        });
        (cs..ce).for_each(|_| {
          ret.push(h);
        });
      }
      ret.push('!' as u8);
      base = *dst;
    }

    String::from_utf8(ret).unwrap()
  }
}

Share this post on:

Previous Post
1250-check-if-it-is-a-good-array
Next Post
1233-remove-sub-folders-from-the-filesystem