0825 TIL Tree , JSON

21922 ワード

🙆‍♀️JSON構造は再帰関数が利用可能なツリー構造であることが理解できる.(stringifyJSON)
🙆‍♀️JSON.StringgifyとJSONparseはシリアルで逆シーケンス化されていることが理解できる.JSON.stringify:オブジェクトタイプをJSON(シリアル化、シリアル化)に変換JSON.parse:JSONを対象タイプに変換(逆シーケンス化、逆シーケンス化)
🙆‍♀️JSON.StringgifyとJSONparseを使用してJavaScript値とJSONを巡回できます.
🙆‍♀️JSONで再帰呼び出しを使用する場合、どこに使用すべきか理解できます.
nullタイプはオブジェクトです.バーグだと言う人もいますが、これは本当ではありません.通常、空のオブジェクトを作成します.
オブジェクトの値がundefinedまたはfunction(){}の場合、JSON.springifyメソッドを使用して{}が出力されます.JSON.parseに再入力しても元の値に戻ることができず、{}が出力されます.`[${[result]}]`と同様の方式(例えば`[${result}]`)を用いて、配列をJSON形式にすることができるが、これは推奨されない方式である.文字列を利用して定式化されているそうです.`${[1, 2]}`を入力すると配列が展開され、「1,2」が出力されます.
文字列をより自由に使用するには、エスケープシーケンスを参照します. \n \' , \"DOMにfor文を適用すると、生成セグメントが再宣言されたような気がしますが、繰り返し文の終了時にスキャンが終了するために再宣言されたわけではありません.Array.fill()メソッドは、配列の開始インデックスから終了インデックスまで、静的値で埋め込まれます.

TOY 1号

function orderOfPresentation(N, K) {
                 // 조의 개수 N, 발표 순서 K
  const factorial = (n) => {
    if (n <= 1) return 1;
    return n * factorial(n - 1);
  };

  let order = 0; // 발표 순서를 담는 변수
  
  // N개의 조 중에, 어떠한 조가 이미 포함되었는지 확인하기 위해 배열을 만든다.
  // 만약 N이 3이라면 [false, false, false, false]
  // 제일 첫 번째는 더미 데이터(인덱스는 0부터 시작하지만 조는 1부터 시작하기 때문)
  const isUsed = Array(N + 1).fill(false);
  
  for (let i = 0; i < K.length; i++) {
    const num = K[i];
    // 사용했는지 판별하기 위해 isUsed에 체크합니다. (중복이 아니기 때문에)
    isUsed[num] = true;
    // num보다 앞에 올 수 있는 수들의 배열을 복제해서,
    const candidates = isUsed.slice(1, num);
    // 이 중에서 아직 사용되지 않은 수의 개수를 구합니다.
    const validCnt = candidates.filter((el) => el === false).length;
    // 아직 사용되지 않은 수, 그 전까지의 모든 경우의 수를 카운트합니다.
    const formerCnt = validCnt * factorial(N - i - 1);
    // order에 추가합니다.
    order = order + formerCnt;
  }
  
  return order;
}

リターンマッチ

function orderOfPresentation(N,K) {
  //N = 5 , K = [3,5,4,2,1]
   const fatorial = (n) => {
		if(n <= 1) return 1;
	  return n * factorial(n - 1);
  }

  let order = 0;
    const isUsed = Array(N + 1).fill(false);
    // [false, false, false, false, false, false]
  
  for (let i = 0; i < K.length; i++) {
    const num = K[i]; //i = 0 , num = 3
    isUsed[num] = true; // [false, false, false, true, false, false]
    const candidates = isUsed.slice(1, num); //[false,false]
    const validCnt = candidates.filter((el) => el === false).length; // 2
    const formerCnt = validCnt * factorial(N - i - 1); //2 * 4!(=24) = 48
    order = order + formerCnt; //48
  
}
  
    const num = K[i]; //i = 1 , num = 5
    isUsed[num] = true; // [false, false, false, true, false, true]
    const candidates = isUsed.slice(1, num); //[false,false,true,false]
    const validCnt = candidates.filter((el) => el === false).length; // 3
    const formerCnt = validCnt * factorial(N - i - 1); //3 * 3!(=6) = 18
    order = order + formerCnt; //48 + 18 = 66
  
}
  
    const num = K[i]; //i = 2, num = 4
    isUsed[num] = true; // [false, false, false, true, true, true]
    const candidates = isUsed.slice(1, num); //[false,false,true]
    const validCnt = candidates.filter((el) => el === false).length; // 2
    const formerCnt = validCnt * factorial(N - i - 1); //2 * 2!(=2) = 4
    order = order + formerCnt; //66 + 4 = 70
  
}
  
    const num = K[i]; //i = 3, num = 2
    isUsed[num] = true; // [false, false, true, true, true, true]
    const candidates = isUsed.slice(1, num); //[false]
    const validCnt = candidates.filter((el) => el === false).length; // 1
    const formerCnt = validCnt * factorial(N - i - 1); //1 * 1! = 1
    order = order + formerCnt; // 70 + 1 = 71
  
}
  
    const num = K[i]; //i = 4, num = 1
    isUsed[num] = true; // [false, true, true, true, true, true]
    const candidates = isUsed.slice(1, num); //[]
    const validCnt = candidates.filter((el) => el === false).length; // 0
    const formerCnt = validCnt * factorial(N - i - 1); // 0 * 0 = 0
    order = order + formerCnt; // 71 + 0 = 0
  
}
 return order; // 71
}

に感銘を与える


最近は首都コードを勝手に書きすぎているようで、首都コードをもう一度丁寧に書く必要があるようです.
再帰関数を考えて書くのは難しい.トルコ人も人の意に及ばず、本当に憂鬱だ.体力は落ちているが、運動もしなければならない.
繰り返すことだけが生きる道だ.