給定一個(gè)二維的甲板挎峦, 請(qǐng)計(jì)算其中有多少艘戰(zhàn)艦香追。?戰(zhàn)艦用'X'表示合瓢,空位用'.'表示。?你需要遵守以下規(guī)則:
給你一個(gè)有效的甲板透典,僅由戰(zhàn)艦或者空位組成晴楔。
戰(zhàn)艦只能水平或者垂直放置顿苇。換句話(huà)說(shuō),戰(zhàn)艦只能由1xN?(1 行, N 列)組成,或者Nx1?(N 行, 1 列)組成税弃,其中N可以是任意大小纪岁。
兩艘戰(zhàn)艦之間至少有一個(gè)水平或垂直的空位分隔?- 即沒(méi)有相鄰的戰(zhàn)艦。
示例 :
X..X
...X
...X
在上面的甲板中有2艘戰(zhàn)艦则果。
無(wú)效樣例 :
...X
XXXX
...X
你不會(huì)收到這樣的無(wú)效甲板?- 因?yàn)閼?zhàn)艦之間至少會(huì)有一個(gè)空位將它們分開(kāi)幔翰。
進(jìn)階:
你可以用一次掃描算法,只使用O(1)額外空間西壮,并且不修改甲板的值來(lái)解決這個(gè)問(wèn)題嗎遗增?
我的思路:遍歷一行,當(dāng)遇見(jiàn)‘X',先檢查其上方是否是’X'款青;如果是做修,說(shuō)明其屬于別的戰(zhàn)艦的一部分,而不是新的戰(zhàn)艦抡草,所以不處理饰及。如果不是,則說(shuō)明是一個(gè)新戰(zhàn)艦康震,一直向右++到遇見(jiàn)非‘X'燎含,這樣就處理了橫著的戰(zhàn)艦,再戰(zhàn)艦+1腿短;如此處理完每一行即可瘫镇。對(duì)于第一行,不用檢查上方數(shù)據(jù)答姥,遇見(jiàn)’X';即認(rèn)為是新戰(zhàn)艦進(jìn)行處理
代碼實(shí)現(xiàn):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 咯咯咯