LeetCode-easy-1-5

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
for (let i = 0; i < nums.length; i++) {
    for (let j = i + 1; j < nums.length; j++) {
      if (nums[i] + nums[j] == target) {
        return [i, j];
      }
    }
  }
};

中心となるアイデア: 二重層の for ループ、最初のラウンドで、配列の 1 番目、2 番目、3 番目... をターゲットと比較します。2 番目のラウンドでは、配列の 2 番目と 3 番目、4 番目... が追加されて比較されます。外側の層 i は 0 から始まり、内側の層 j は i の次の層で、i+1 から始まります。

9. 回文番号

私の解決策:最初に文字列を変換してから配列に入れ、もう一度繰り返して配列を反転し、最後に2つの配列を文字列比率に変換します。

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
const strNum = x.toString().split("");
// 翻转涉及引用赋值拷贝问题,以下一行可替换为
// const newStrX = strX.slice(0);
// const reverseX = newStrX.reverse();
  const reverseNum = x.toString().split("").reverse();
 return strNum.toString() === reverseNum.toString();
};

 13. ローマ数字を整数に変換する

 私の解決策:前の数字より小さい場合は次の数字を減算し、i+1をループします

しかしその後、IXL/IXC/ICD/ICMの入力時に問題が発生することが判明し、ローマ数字の規則を調べたところ、IXL自体が無効なローマ数字であるようで、59:LIX.41:XLIによると、この正しい入力結果は正しいです。後で戻って判断ミスを埋め合わせてください

/**
 * @param {string} s
 * @return {number}
 */
var romanToInt = function(s) {
const sArr = s.split("");
  const commonRoman = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 };
  let total = 0;
  for (let i = 0; i < sArr.length; i++) {
    if (commonRoman[sArr[i]] < commonRoman[sArr[i + 1]]) {
      total += 0 - commonRoman[sArr[i]] + commonRoman[sArr[i + 1]];
      i += 1;
    } else {
      total += commonRoman[sArr[i]];
    }
  }
  return total;
};

14. 最長の共通プレフィックス

私の解決策:配列から最初の文字列をベースとして取得し、indexOfを使用して検索し、見つからないたびに最初の文字列の最後の文字を削除し、最初の文字を返すプレフィックスのみを検索します(indexOfの結果は次のとおりです) 0 ) 一致する

/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function(strs) {
 var basic = strs[0] || "";
  for (var i = 1; i < strs.length; i++) {
    while (strs[i].indexOf(basic) === -1  || strs[i].indexOf(basic) !== 0) {
      basic = basic.substring(0, basic.length - 1);
    }
   
  }
  return basic;
};

この質問を判断するために、indexOf を使用する方法は? 私は長い間考えてきましたが、偉人の解決策を見つけました。ここにコピーしてください。

var longestCommonPrefix = function(strs) {
    let  re=strs[0]||"";
    if(strs.length==1){
       return strs[0]
    }
    for(let i=0; i<strs.length;i++){
       
        while(strs[i].slice(0,re.length)!==re){
              re=re.slice(0,re.length-1)
          }
    }
    
    return re
    
};

作者:intelligent-i3ouman4ad
链接:https://leetcode.cn/problems/longest-common-prefix/solution/jsjie-ti-si-lu-qing-xi-ming-liao-by-inte-9g28/

20. 有効な括弧

これは非常に速く書かれていますが、間違った考えはとても速いです。私の間違った考えは、文字列をペアにして配列に入れ、配列を走査するというものです。下に行くと、残りの半分は正しい "()" に置き換えられます。残りの半分は false です。実行中もエラーは報告され、「(([]){})」の状況は考慮されません。

その後、しばらく悩んで、配列内の「()」に似た通常の要素を3つ削除しようとしましたが、やはり失敗し、文字列形式に変更して試してみましたが、効率が非常に悪かったです。メモリ消費量 46.7 MB、実行時間: 88 ミリ秒

### 解题思路
循环删除字符串'()''[]''{}'直到indexof查找不到停止,新字符串为空是true,不为空是false

### 代码

```javascript
/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
   if (s.length % 2 === 0) {
    let re = true;
    let newS = "";
    newS = s.replace("()", "").replace("[]", "").replace("{}", "");
    while (
      newS.indexOf("()") !== -1 ||
      newS.indexOf("[]") !== -1 ||
      newS.indexOf("{}") !== -1
    ) {
      newS = newS.replace("()", "").replace("[]", "").replace("{}", "");
    }
    if (newS.length == 0) {
      re = true;
    } else {
      re = false;
    }
    return re;
  } else {
    return false;
  }
};

おすすめ

転載: blog.csdn.net/m0_67987829/article/details/126641137