Skip to content

423. 从英文中重建数字

解题过程

INFO

题目链接 给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字

javascript
/**
 * @link https://leetcode.cn/problems/reconstruct-original-digits-from-english/
 * @title 423. 从英文中重建数字
 * @description 给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字
 * @param {string} s
 * @return {string}
 */
// 解法一
// 思路:看了20分钟没思路,根据官方题解思路自己做了一遍
// 第一步:统计所有字符出现的次数
// 第二步:找规律,每个数字单词,先统计特殊字符的单词,在统计根据特殊字符单词减去可以等到的剩下字符的单词
// 第三步:组装数字
var originalDigits = function (s) {
  const sMap = new Map()
  const nums = new Array(10).fill(0)

  for (let i = 0; i < s.length; i++) {
    sMap.set(s[i], (sMap.get(s[i]) || 0) + 1)
  }

  nums[0] = sMap.get('z') || 0
  nums[2] = sMap.get('w') || 0
  nums[4] = sMap.get('u') || 0
  nums[6] = sMap.get('x') || 0
  nums[8] = sMap.get('g') || 0

  nums[3] = (sMap.get('h') || 0) - nums[8]
  nums[5] = (sMap.get('f') || 0) - nums[4]
  nums[7] = (sMap.get('s') || 0) - nums[6]
  nums[1] = (sMap.get('o') || 0) - nums[0] - nums[2] - nums[4]
  nums[9] = (sMap.get('i') || 0) - nums[5] - nums[6] - nums[8]

  const res = []
  for (let i = 0; i < nums.length; i++) {
    res.push((i + '').repeat(nums[i]))
  }

  return res.join('')
}

// const result = originalDigits('owoztneoer') // 012
// const result = originalDigits('fviefuro') // 45
const result = originalDigits('nnei') // 9
console.log(result)

解题感受

想了 20 分钟思路一直卡死,没有解题方法,而且没有比较好的技巧解题,看了官方题解思路理解一遍做的,感觉就是硬找单词字符规律穷举计算得来的,怀疑这题的考察什么,用意在哪里 😓

优质题解