Algorithm Basic_#4


問題13📓
文字列が要素の配列を入力すると、文字列を垂直に読み出すときの文字列を返さなければなりません.
-I/O
  • 入力:stringタイプを要素とする配列
  • 出力:戻りstringタイプ
  • -I/O例
    let input = [
      //
      'hello',
      'wolrd',
    ];
    let output = readVertically(input);
    console.log(output); // --> 'hweolllrod'
    
    input = [
      //
      'hi',
      'wolrd',
    ];
    output = readVertically(input);
    console.log(output); // --> 'hwiolrd'
    -答えは?
    1)arr[0][0] + arr[1][0]arr[0][1] + arr[1][1]arr[0][2] + arr[1][2]・で接続する.
    2)最初のインデックスはarrの長さ
    3)2番目のインデックスは最長文字列の長さです(他の文字列に対応するインデックス値がない場合は、転送を続行します).
    4)文字列インデックスを基準として配列のインデックスが重複しているため,文字列インデックス外部を文とし,配列インデックス内部を文とする.
    function readVertically(arr) {
    let maxLeng = 0;
    for (i = 0; i < arr.length; i++) {
      if (arr[i].length > maxLeng) {
        maxLeng = arr[i].length
      }
    }
    let result = ''
    for (let j = 0; j < maxLeng; j++) {
      for (let n = 0; n < arr.length; n++) {
        if (arr[n][j] === undefined) {
          continue
        } 
        result = result + arr[n][j]
      }
    }
      return result
    }
    -結果
    国境を越える👌
    - Reference code
    function readVertically(arr) {
      let temp = [];
      for (let i = 0; i < arr.length; i++) {
        let str = arr[i];
        for (let j = 0; j < str.length; j++) {
          if (temp.length === j) {
            temp.push(str[j]);
          } else {
            temp[j] = temp[j] + str[j];
          }
        }
      }
    
      let result = '';
      for (let i = 0; i < temp.length; i++) {
        result = result + temp[i];
      }
    
      return result;
    }
  • temp配列の長さと文字列の長さの比較
    同じ長さの場合、長い他の文字列のロールはtemp配列の後ろに入ります.
    長さが異なる場合は、既存のtemp配列で、新しい文字列を同じインデックスロール間で集約します.
  • に質問📓
    数値を要素として入力し、各要素が以前の要素の和より大きいかどうかを返します.
    -I/O
  • 入力:数字を要素とする配列(arr[i]整数)
  • 出力:ブール型戻り(arr[i]以上でなければならないarr[0]arr[i-1]の和
  • -I/O例
    let output = superIncreasing([1, 3, 6, 13, 54]);
    console.log(output); // --> true
    
    output = superIncreasing([1, 3, 5, 9]);
    console.log(output); // --> false
    -答えは?
    1)for文を繰り返し,sumにインデックス順に加算する.
    2)プラス記号を繰り返した後、次の索引と和を比較します.
    3)sumが次のインデックスより大きいか等しい場合はfalseを返します.
    4)残りの場合はtrueを返します.
    function superIncreasing(arr) {
      let sum = arr[0];
      let result;
      for (let i = 1; i < arr.length; i++) {
        result = true;
        sum = sum + arr[i]
        if (sum >= arr[i + 1]) {
          result = false;
          break;
      } 
    }
    return result
    }
    -結果
    国境を越える👌
    - Reference code
    function superIncreasing(arr) {
      let sum = arr[0];
      for (let i = 1; i < arr.length; i++) {
        if (arr[i] <= sum) {
          return false;
        }
        sum = sum + arr[i];
      }
      return true;
    }
    に質問📓
    2つの数値(num 1,num 2)を受け入れ、num 1をnum 2の残りの部分で割った値を返します.
    -I/O
  • 入力:numberタイプの整数(num 1>=0)
  • 出力:numberタイプの整数(num 2>=0)
  • -I/O例
    let output = modulo(25, 4);
    console.log(output); // --> 1
    -答えは?
    1)for文を用いてnum 1をnum 2に分け続け,残りを求める.
    2)num 1をnum 2より大きくなるまで繰り返す.
    function modulo(num1, num2) {
      if (num1 === 0) {
        return 0
      }
    
      if (num2 === 0) {
        return 'Error: cannot divide by zero'
      }
    
      for (i = num1; i > 0; i = i - num2) {
        if (i < num2) {
          break
        }
      }
      return i
    } 
    -結果
    国境を越える👌
    - Reference code
    function modulo(num1, num2) {
      if (num2 === 0) {
        return 'Error: cannot divide by zero';
      }
    
      while (num1 >= num2) {
        num1 = num1 - num2;
      }
    
      return num1;
    }
    for文の代わりにwhile文を使用すると、より簡潔な符号化になります.初期文を入れず、1つの増監文だけで儀式を実現した.
    に質問📓
    文字列を受け入れ、等軸図であるかどうかを返します.等値線図とは、アルファベットごとに1回しか使用しない単語や文を指す.
    -I/O
  • 入力:stringタイプスペースのないアルファベット文字列
  • 出力:booleanタイプ
  • -I/O例
    let output = isIsogram('aba');
    console.log(output); // false
    
    output = isIsogram('Dermatoglyphics');
    console.log(output); // true
    
    output = isIsogram('moOse');
    console.log(output); // false
    -答えは?
    1)文字列を大文字または小文字に整理します.
    2)for文を使用して、インデックスと次のインデックスの値を比較します.
    3)外部forクエリの範囲は最後のインデックスの前に限られる.最後のインデックスは、前のすべてのインデックスと比較されているからです.
    function isIsogram(str) {
      if (str.length === 0) {
        return true;
      }
    
      let newStr = str.toUpperCase()
      for (let i = 0; i < newStr.length - 1; i++) {
        for (let j = i + 1; j < newStr.length; j++) {
          if (newStr[i] === newStr[j]) {
            return false;
          }
        }
      }
      return true;
    }
    -結果
    国境を越える👌
    - Reference code
    function isIsogram(str) {
      if (str.length === 0) {
        return true;
      }
    
      let cache = {};
      let strLowered = str.toLowerCase();
    
      for (let i = 0; i < strLowered.length; i++) {
        if (cache[strLowered[i]]) {
          return false;
        }
        cache[strLowered[i]] = true;
      }
    
      return true;
    }
    対象を活用した.オブジェクトのキーを文字列のインデックス値として「true」とします.
    key値が含まれている場合はfalseを返す必要があります.