LeetCode題解:2347. 最好的撲克手牌,哈希表,詳細(xì)注釋

原題鏈接:
https://leetcode.cn/problems/best-poker-hand/

理解題意:

  1. 有五張相同花色的撲克牌,與五張撲克牌只有一種花色意思相同
  2. 五張大小互不相同的撲克牌,與共有五種大小的撲克牌意思相同
  3. 該題要區(qū)分花色和大小分別統(tǒng)計(jì)數(shù)量

解題思路:

  1. 先用Set統(tǒng)計(jì)共有多少種花色,如果只有一種,表示有“五張相同花色的撲克牌”
  2. Map統(tǒng)計(jì)每種大小的撲克牌共有幾張
    • 如果rankMap.size5,表示有“五張大小互不相同的撲克牌”
    • 如果rankMap中有牌的數(shù)量大于等于3,即為“三條”
    • 如果rankMap有牌的數(shù)量等于2,即為“對(duì)子”
/**
 * @param {number[]} ranks
 * @param {character[]} suits
 * @return {string}
 */
var bestHand = function (ranks, suits) {
  // 使用Set統(tǒng)計(jì)有多少種花色
  let suitSet = new Set()

  for (const suit of suits) {
    suitSet.add(suit)
  }

  // 如果只有一種花色,表示同種花色有5張
  if (suitSet.size === 1) {
    return 'Flush'
  }

  // 使用Map統(tǒng)計(jì)每種大小牌的數(shù)量
  let rankMap = new Map()

  for (const rank of ranks) {
    rankMap.set(rank, (rankMap.get(rank) ?? 0) + 1)
  }

  // 如果有五種大小,表示有五張大小互不相同的撲克牌
  if (rankMap.size === 5) {
    return 'High Card'
  }

  // 查看不同大小的牌都有幾張
  for (const count of rankMap.values()) {
    // 大等于3張都為“三條”
    if (count >= 3) {
      return 'Three of a Kind'
    }
  }

  // 剩下的只有“對(duì)子”一種可能
  return 'Pair'
}

復(fù)雜度分析

  • 時(shí)間復(fù)雜度:O(n)
  • 空間復(fù)雜度:O(n)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容