leetcode

我的 leetcode 题解(JavaScript)


递归版

const decodeString = function (s) {
  let i = {value: 0};
  // console.log(decodeStringSub(i, s));
  return decodeStringSub(i, s);
};
const decodeStringSub = function (i, s) {
  let res = '';
  for (let ii = s.length; i.value < ii && s[i.value] !== ']';) {
    if (!/[0-9]/.test(s[i.value])) {
      res += s[i.value++];
    } else {
      let count = '';
      // console.log(i,s[i],/[0-9]/.test(s[i]));
      while (i.value < ii && /[0-9]/.test(s[i.value])) {
        // console.log(s[i]);
        count += s[i.value++];
      }
      count = +count;
      ++i.value;
      let str = decodeStringSub(i, s);
      // while (s[i++] !== ']') {
      // }
      ++i.value;
      while (count-- > 0) {
        // console.log(count);
        res += str;
      }
    }
  }
  return res;
}

普通版本

const decodeString = function (s) {
  let stackStr = [], stackCount = [], res = ''
  for (let i = 0, ii = s.length; i < ii;) {
    if (/[0-9]/.test(s[i])) {
      let count = '';
      while (i < ii && /[0-9]/.test(s[i])) {
        // console.log(s[i]);
        count += s[i++];
      }
      stackCount.push(+count);
    } else if (s[i] === '[') {
      stackStr.push(res);
      res = '';
      ++i;
    } else if (s[i] === ']') {
      let time = stackCount.pop();
      let tempStr = stackStr.pop();
      while (time-- > 0) {
        // console.log(count);
        tempStr += res;
      }
      res = tempStr;
      ++i;
    } else {
      res += s[i++];
    }
  }
  return res;
  console.log(res);
}