題目描述為: 用一個二維陣列來表示一張地圖,其中陣列內元素值為 1 表示土地,元素值為 0 表示水,那些連在一起的土地形成了一座島嶼,而整張地圖只有一個島嶼,要我們找出島嶼的周長。
我們可以按照定義遍歷所有格子點,檢查與其相鄰的4個邊是否碰到邊界或者碰到水域,若有則周長+1,每個格子點周長至多加4。
參考程式碼
func islandPerimeter(grid [][]int) int {
    Ans := 0
	lx := len(grid)
	ly := len(grid[0])
	for i := 0; i < lx; i++ {
		for j := 0; j < ly; j++ {
			// in water region
			if grid[i][j] == 0 {
				continue
			}
			//up
			if j-1 < 0 || grid[i][j-1] == 0 {
				Ans++
			}
			//down
			if j+1 >= ly || grid[i][j+1] == 0 {
				Ans++
			}
			//left
			if i-1 < 0 || grid[i-1][j] == 0 {
				Ans++
			}
			//right
			if i+1 >= lx || grid[i+1][j] == 0 {
				Ans++
			}
		}
	}
	return Ans
}
方法 1 遍歷全部格子點,此方法當島嶼數量不為 1 時以及計算島嶼面積時,仍然適用。若要求島嶼數量時,則需增加變數來紀錄各格子點為土地時,所在的島嶼編號。
我將解法加上簡單的測試,上傳程式碼到此。
數學上對於研究周長問題的過程中也發展了許多重要的思想與方法,我舉其中幾例: