對於乙個給定的井字棋棋盤,請設計乙個高效演算法判斷當前玩家是否獲勝。
給定乙個二維陣列board,代表當前棋盤,其中元素為1的代表是當前玩家的棋子,為0表示沒有棋子,為-1代表是對方玩家的棋子。
測試樣例:
[[1,0,1],[1,-1,-1],[1,-1,0]]
返回:true井字棋,是一種在3* 3格仔上進行的連珠遊戲,三個相同就代表獲勝。
井字棋有四種情況表示當前玩家獲勝:
1)行全為1, 即行的和為3
2)列全為1, 列的和為 3
3)主對角全為1, 對角和為3
4) 副對角全為1, 對角和為3
暴力列舉法針對該問題很快就能夠求解完畢,並且非常好理解,然而如果擴充套件為n*n的話,判斷和是否等於n,無法暴力列舉得出,下面**即能夠完成該項拓展。
暴力列舉法:
class
board
};
一般方法:
class
board
if(sum == row)
return
true;}
// 檢查每一列的和是否等於row
sum =0;
for(i =
0; i < row;
++i)
if(sum == row)
return
true;}
//檢查主對角線的和是否等於row
sum =0;
for(i =
0; i < row;
++i)
if(sum == row)
return
true
;// 檢查副對角線的和是否等於row
sum =0;
for(i =
0; i < row;
++i)
if(sum == row)
return
true
;return
false;}
};
每日一題 蝸牛爬井問題
每日一題 蝸牛爬井問題 每日一題 跳台階擴充套件問題 滴滴筆試題 有一口深度為high公尺的水井,井底有乙隻青蛙,它每天白天能夠沿井壁向上爬up公尺,夜裡則順井壁向下滑down公尺,若青蛙從某個早晨開始向外爬,對於任意指定的high up和down值 均為自然數 計算青蛙多少天能夠爬出井口?輸入描述...
每日一題力扣19
給你乙個鍊錶,刪除鍊錶的倒數第n個結點,並且返回鍊錶的頭結點。高階 你能嘗試使用一趟掃瞄實現嗎?class solution def removenthfromend self,head listnode,n int listnode dummy listnode 0 dummy.next head...
C語言基礎 二維陣列應用 一 井字棋
陣列是c語言中一種重要的資料型別,接下來我和大家分享用二維陣列完成乙個井字棋遊戲。井字棋,是一種在3 3格仔上進行的連珠遊戲,和五子棋類似。遊戲需要的工具僅為紙和筆,然後由分別代表o和x的兩個遊戲者輪流在格仔裡留下標記 一般來說先手者為x 任意三個標記形成一條直線,則為獲勝。井字棋的規則想必大家都已...