299. 猜数字游戏

思路

先用 map 存起来, 再遍历一次把位置对的index删掉,然后 再把奶牛计算出来

代码

  1. /**
  2. * @param {string} secret
  3. * @param {string} guess
  4. * @return {string}
  5. */
  6. var getHint = function(secret, guess) {
  7. const map = new Map();
  8. // 遍历完成map
  9. for(let i = 0; i < secret.length; i++) {
  10. let cur = secret[i];
  11. if (map.has(cur)) {
  12. map.get(cur).push(i);
  13. } else {
  14. map.set(cur, [i]);
  15. }
  16. }
  17. let a = 0, b = 0, usedIdx = []
  18. for(let i = 0; i < guess.length; i++) {
  19. let cur = guess[i];
  20. // 如果在secret中
  21. if (map.has(cur)) {
  22. let cArr = map.get(cur)
  23. // 如果有当前索引并且位置相同,就把当前索引删除
  24. if (map.get(cur).includes(i)) {
  25. let idx = cArr.indexOf(i)
  26. usedIdx.push(i)
  27. cArr.splice(idx, 1)
  28. a ++
  29. }
  30. if (!cArr.length) {
  31. map.delete(cur)
  32. }
  33. }
  34. }
  35. // console.log(map)
  36. for(let i = 0; i < guess.length; i++) {
  37. let cur = guess[i];
  38. // 如果在secret中,都是位置不对的
  39. if (usedIdx.includes(i)) continue
  40. // console.log(cur, map.has(cur))
  41. if (map.has(cur)) {
  42. let cArr = map.get(cur)
  43. if (cArr.length) {
  44. b++;
  45. }
  46. cArr.shift()
  47. if (!cArr.length) {
  48. map.delete(cur)
  49. }
  50. }
  51. }
  52. return `${a}A${b}B`
  53. };

复杂度分析

时间复杂度 数字与字符串间转换 - 图1#card=math&code=O%28N%29)
空间复杂度 数字与字符串间转换 - 图2#card=math&code=O%28N%29)

412. Fizz Buzz

思路

遍历就完了

代码

  1. /**
  2. * @param {number} n
  3. * @return {string[]}
  4. */
  5. var fizzBuzz = function(n) {
  6. const ret = [];
  7. let idx = 1;
  8. while(idx <= n) {
  9. let m5 = idx % 5 === 0, m3 = idx % 3 === 0
  10. if (m3 && m5) {
  11. ret.push('FizzBuzz')
  12. } else if (m3) {
  13. ret.push('Fizz')
  14. } else if (m5) {
  15. ret.push('Buzz')
  16. } else {
  17. ret.push(`${idx}`)
  18. }
  19. idx++
  20. }
  21. return ret;
  22. };

复杂度分析

时间复杂度 数字与字符串间转换 - 图3#card=math&code=O%28N%29)
空间复杂度 数字与字符串间转换 - 图4

506. 相对名次

思路

先排序,然后用map记下每个分数对应的名词,再遍历元数据

代码

  1. /**
  2. * @param {number[]} score
  3. * @return {string[]}
  4. */
  5. var findRelativeRanks = function(score) {
  6. let ret = score.slice(), map = {};
  7. ret.sort((a, b)=> b - a)
  8. map[ret[0]] = "Gold Medal"
  9. map[ret[1]] = "Silver Medal"
  10. map[ret[2]] = "Bronze Medal"
  11. for(let i = 3; i < ret.length; i ++) {
  12. let cur = ret[i]
  13. map[cur] = `${i+1}`
  14. }
  15. let res = []
  16. for(let i = 0; i < score.length; i ++) {
  17. let cur = score[i]
  18. res[i] = map[cur]
  19. }
  20. return res;
  21. };

复杂度分析

时间复杂度 数字与字符串间转换 - 图5#card=math&code=O%28N%29)
空间复杂度 数字与字符串间转换 - 图6#card=math&code=O%28N%29)

539. 最小时间差

553. 最优除法

537. 复数乘法

592. 分数加减运算

640. 求解方程

38. 外观数列

443. 压缩字符串

8. 字符串转换整数 (atoi)

13. 罗马数字转整数

12. 整数转罗马数字

273. 整数转换英文表示

165. 比较版本号

481. 神奇字符串