レモネード変化


それは数日間の食物でしたので、簡単なポストで脳をマッサージしましょう"Lemonade Change." 問題では、我々はレモネードは5ドルを支払うと言われています、あなたはベンダーが出発する変更をしません、そして、買い手は5ドル札、10ドル札または20ドル札で支払います.配列bills 5、10、または20を含む場合は、すべてのトランザクションで適切な変更を提供できるかどうかを判断します.もしそうならばtrue , そうでない場合、false.この問題は簡単にleetcodeであり、あまりにも多くの炭水化物の呪文の下では、最初は難しいと思われたが、正直にそれはfizzbuzzよりもはるかに困難ではない.
開始するには、我々のエッジのケースに対処しましょう.空の配列を受け取るか、配列の最初の値が5に等しくない場合、falseを返さなければなりません.後者の場合では、売り手が起動する変更がないことを知っていますので、5で始まる配列が変更されない配列が用意されます.それは無理だ.それで、それを書きましょう.
var lemonadeChange = function(bills) {
  if (!bills.length || bills[0] !== 5) return false
}
次のステップは、問題にアプローチする方法を理解することです.このアプローチは、配列全体を反復処理し、既存の変更に基づいて値を比較する必要があります.効果的に、我々は変更引き出しを作成する必要があります.私は、これをキーとして紙幣のドル量とそれらの紙幣の量に対応するオブジェクトとしてこれをしましたlet change = {'5': 0, '10': 0, '20': 0} ( JavaScriptのキーとして整数を使用できないことを覚えておいてください).
次のステップは、すべての異なるシナリオを考慮して、それに応じてオブジェクトを操作することです.この関数は配列の上で反復し、入力値の値に基づいてそれぞれのif/else文に対する入力値をテストします.
最初のは簡単です.配列値が5の場合、変更を生成する必要はありませんので、変更対象の' 5 'キーをインクリメントするだけです.( nb :私はこれをしませんでしたが、5から始まる配列がfalseを返すので、' 5 'は1の値を持ち、配列インデックス1でイテレーションを開始し、Simidtime of timeを保存します.
2番目のケースでは、配列の値が10ならば何が起こるかについて述べる必要があります.この場合、変更オブジェクトの適切な値をもう一度インクリメントします.しかし今回は、変化を生じさせなければなりません.$ 5、10ドル、または20ドル札だけがあれば、5ドル札で変更を払うことができます.変更オブジェクト(すなわち、キー5が1以上の値を持っている)で5ドルの請求があるならば、我々は変化を生じることができます.それで、我々は5つのキーの値を1によって減らさなければなりません.そうでない場合、変更は生成できないので、ループを中断し、falseを返します.
最も複雑なロジックは、20ドル紙幣が付属しています.私たちは同じものを始めます、キー' 20 'の値を1つずつ増やして、変化が生じることができるかどうか見ることによって.変更は、10ドルと5ドルまたは3ドル5ドル札で生産することができます.$ 5札がもっと必要だから、最初に$10と$ 5があればチェックしてください.もしそうならば、対応するキーを一つずつ減らしてください.ない場合は、3つの5ドル札があるかどうかを確認します.もしそうならば、3によってキー5を減らしてください.条件が満たされていない場合は、ループを中断してfalseを返します.
挿入することによってreturn false ループ全体のステートメントは、我々は正しい変更を生成することは不可能です任意の状況に対処している.つまり、すべての値を繰り返すことによってループが正常に終了した場合bills , 返り値はtrueでなければなりません.
以下の完全な機能をチェックしてください.それはすべてのすべてのロジックの多くは、かなり簡単です.
var lemonadeChange = function(bills) {
  if (!bills.length || bills[0] !== 5) return false
  let change = {'5': 0, '10': 0, '20': 0}
  for(let i = 0; i < bills.length; i++){
      if(bills[i] === 5){
          change['5']++
      } else if (bills[i] === 10){
          change['10']++
          if (change['5'] === 0){
              return false
          } else {
              change['5']--
          }
      } else {
          change['20']++
          if (change['10'] >= 1 && change['5'] >= 1){
              change['10']--
              change['5']--
          } else if (change['5'] >= 3){
              change['5'] -= 3
          } else {
              return false
          }
      }
  }
  return true
};