Leetcode Algorithm Series: Pascal's Triangle

ภาพถ่ายโดย Pankaj Patel บน Unsplash

สวัสดี! ปัญหาของวันนี้มาจากคำถามสัมภาษณ์ยอดนิยมของ Leetcode — ง่าย ๆ ภายใต้บทอื่น ๆ

ในสามเหลี่ยมปาสกาล :

กำหนดจำนวนเต็มnumRowsให้คืนค่า numRows แรกของสามเหลี่ยมPascal

ในรูปสามเหลี่ยมของ Pascalแต่ละตัวเลขคือผลรวมของตัวเลขสองตัวที่อยู่เหนือตัวเลขดังที่แสดง:

ตัวอย่าง:

Input: numRows = 5
Output: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
Input: numRows = 1
Output: [[1]]

ด้านล่างนี้คือวิธีคำนวณทางคณิตศาสตร์สำหรับแต่ละแถว เนื่องจากหลักแรกและหลักสุดท้ายเป็น 1 เสมอ ฉันจึงใช้เลขศูนย์เพื่อให้แน่ใจว่าได้บวกเลข 1 แล้วเมื่อฉันจะไปที่แถวถัดไป

row1: 0 1 0 => 0 + 1, 1 + 0
row2: 0 1 1 0 => 0 + 1, 1 + 1, 1 + 0
row3: 0 1 2 1 0 => 0 + 1, 1 + 2, 2 + 1, 1 + 0
row4: 0 1 3 3 1 0 => 0 + 1, 1 + 3, 3 + 3, 3 + 1, 1 + 0
row5: 0 1 4 6 4 1 0

ในการสร้างแถวใหม่ ฉันตรวจสอบโดยพื้นฐานว่าหากองค์ประกอบก่อนหน้าองค์ประกอบที่ฉันอยู่ไม่มีการกำหนด นี่คือองค์ประกอบเริ่มต้นของอาร์เรย์ และฉันจะเพิ่ม 0 ลงไปและผลักผลรวมนั้นไปยังแถวใหม่ของฉัน ในทำนองเดียวกัน หากตัวนับตรงกับดัชนีสุดท้ายของแถวปัจจุบัน แสดงว่าฉันอยู่ในองค์ประกอบสุดท้ายในอาร์เรย์ และฉันจะเพิ่ม 0 ลงไปและผลักผลรวมนั้นไปยังแถวใหม่ของฉัน สำหรับองค์ประกอบใด ๆ ในระหว่างนั้น ฉันจะเพิ่มมันด้วยค่าองค์ประกอบต่อไปนี้และผลักผลรวมนั้นไปยังอาร์เรย์ใหม่ของฉัน

ตรรกะแบบมีเงื่อนไขพิเศษเพียงอย่างเดียวที่ฉันต้องเพิ่มคือถ้ามีเพียง 1 องค์ประกอบในแถวปัจจุบันของอาร์เรย์ โดยที่ทั้งองค์ประกอบก่อนหน้าและองค์ประกอบถัดไปไม่ได้กำหนดไว้ ฉันจะกดค่าของมัน + 0 สองครั้ง ในการหวนกลับ ฉันสามารถตั้งค่า 2 คำสั่งเงื่อนไขที่แตกต่างกันก่อนที่จะป้อน for ลูปที่ฉันส่งคืน [[1]] ถ้า numRows = 1 หรือ [[1], [1,1]] ถ้า numRows = 2 นี้จะมี อนุญาตให้ฉันขจัดความจำเป็นสำหรับคำสั่งตรรกะแบบมีเงื่อนไขแล้ว

ด้านล่างเป็นรหัสที่สมบูรณ์ของฉัน:

var generate = function(numRows) {
  let result = [[1]]
for (let i = 0; i < numRows-1; i++) {
    row = [];
        
    for(let j = 0; j < result[i].length; j++) {
      if (result[i][j-1] === undefined && result[i][j+1] === undefined) {
          row.push(0 + result[i][j])
          row.push(result[i][j] + 0)
      } else if (result[i][j-1] === undefined) {
          row.push(0 + result[i][j])
          row.push(result[i][j] + result[i][j+1])
      } else if (j === result[i].length - 1) {
          row.push(0 + result[i][j])
      } else {
          row.push(result[i][j] + result[i][j+1])
      }
    }
        
    result.push(row)
  }
    
  return result
};

ฉันชอบที่จะได้ยินว่าโค้ดของฉันจะดีขึ้นได้อย่างไร หากคุณมีวิธีแก้ไขปัญหานี้ที่แตกต่างออกไป หรือคุณแก้ปัญหาอัลกอริทึมนี้อย่างไร หากคุณกำลังดิ้นรนกับมัน ฉันหวังว่านี่จะช่วยให้ชัดเจนขึ้น!

มองหาโซลูชัน LeetCode เพิ่มเติมในอนาคต!

ชุด LeetCode:

1. ประกอบด้วยรายการที่ซ้ำกัน
2. Merge Sorted Array
3. ตัวตรวจสอบความสูง
4. Palindrome ที่ถูกต้อง
5. Happy Number
6. คำนำหน้าทั่วไปที่ยาวที่สุด
7. Climbing Stairs
8. วงเล็บที่ถูกต้อง
9. Pascal's Triangle
10. Subarray สูงสุด

เนื้อหาเพิ่มเติมที่plainenglish.io

Suggested posts

สองปีในการออกแบบ - ดี ไม่ดี และน่าเกลียด...

สองปีในการออกแบบ - ดี ไม่ดี และน่าเกลียด...

“หวัดดี Siri เล่น Me Dive โดย Olivia Dean” ในเดือนพฤษภาคม 2021 ฉันเริ่มฝึกงานที่ Future Academy Africa ในเมือง Akure ประเทศไนจีเรีย

การค้นหาข้อมูลเกี่ยวกับชื่อโดเมน

ตัดตอนมาจาก Small, Sharp Software Tools โดย Brian P. Hogan

การค้นหาข้อมูลเกี่ยวกับชื่อโดเมน

เมื่อคุณส่งคำขอไปที่ facebook.com คอมพิวเตอร์ของคุณจะค้นหาชื่อโดเมนเพื่อแปลชื่อโดเมนนั้นเป็นที่อยู่ IP เพื่อให้คอมพิวเตอร์ของคุณสามารถเชื่อมต่อได้

Related posts

คาวบอยโกหก

บรรษัทขนาดใหญ่ขายคนอเมริกันด้วยความเท็จได้อย่างไร

คาวบอยโกหก

เช้าวันนี้เป็นสีทองอร่ามบนเนินเขาทางทิศตะวันตก เมื่อแสงแรกของแสงแดดส่องให้เห็นหญ้าที่ปกคลุมด้วยน้ำค้างแข็งบนที่ราบ ฝูงวัวแองกัสที่สงบนิ่ง ตัวสีดำสนิทและตัวมหึมา มีเงาสะท้อนยามพระอาทิตย์ขึ้นขณะที่พวกมันเดินไปตามทางที่ไม่ค่อยมีใครรู้จักไปยังสถานที่ที่พวกเขารู้จักดี บาร์อาหารเช้า

เงินทุนกำจัดคาร์บอนในปีงบประมาณ 24

รายละเอียดคำขอจัดสรรของ Carbon180 ข้ามเส้นทาง

เงินทุนกำจัดคาร์บอนในปีงบประมาณ 24

โดย Alyson Lee ที่ปรึกษาด้านการจัดการภาครัฐ กระบวนการจัดสรรประจำปีของรัฐบาลกลางเป็นหัวใจสำคัญของความพยายามของเราในการให้ทุนสนับสนุนการกำจัดก๊าซคาร์บอนไดออกไซด์ (CDR) ในแต่ละปี Carbon180 จะส่งคำขอไปยังสำนักงานรัฐสภาหลายแห่งเพื่อช่วยชี้แนะว่าเงินดอลลาร์ในปีหน้าจะไหลไปที่ใด

ความท้าทายในการอ่าน Goodreads เป็นพิษ

ความท้าทายในการอ่าน Goodreads เป็นพิษ

อาการคันในมือของฉันลามไปทั่วเมื่อฉันต่อรองราคากับร้านหนังสือในท้องถิ่นเพื่อซื้อหนังสืออีกเล่มหนึ่ง หนังสือเล่มนี้เหมือนกับหนังสืออื่นๆ ที่ฉันเพิ่งซื้อเมื่อเร็วๆ นี้ จะพบบัลลังก์บนกอง 'To Be Read' (TBR) ของฉัน; และถึงกระนั้นฉันก็ซื้อมัน

การพังทลายอย่างช้าๆ: เปิดเผยวิธีที่ผู้คนสูญเสียไปในอาชีพของพวกเขา

การพังทลายอย่างช้าๆ: เปิดเผยวิธีที่ผู้คนสูญเสียไปในอาชีพของพวกเขา

ในโลกที่เปลี่ยนแปลงอย่างรวดเร็วและการแข่งขันในปัจจุบัน อาชีพของคนๆ หนึ่งมีบทบาทสำคัญในการเติบโตส่วนบุคคล ความมั่นคงทางการเงิน และความพึงพอใจในชีวิตโดยรวม อย่างไรก็ตาม ผู้คนจำนวนมากพบว่าตัวเองติดอยู่ในวงจรของความเมื่อยล้าและความไม่พอใจอย่างไม่หยุดยั้ง ค่อยๆ สูญเสียชีวิตการทำงานไป