605. Can Place Flowers - Easy

前往題目

想法

  • 指定一個中點,看左右是否是0

思路

  1. 把花床前後各加一個0,這樣就可以在看中點時,不遺漏頭尾的0
  2. 疊代整個加長過的花床,遇到一組30的就在中間種一朵花
  3. 最後如果還有花剩下,false,否則true

自己寫了蠻長的雖然思路對了但是edge case無法解決

Code

class Solution {
    public boolean canPlaceFlowers(int[] flowerbed, int n) {
        if (n == 0) return true;

        // 擴展花床,前後補0
        int[] realflowerbed = new int[flowerbed.length + 2];
        realflowerbed[0] = 0;
        realflowerbed[realflowerbed.length - 1] = 0;
        for (int i = 0; i < flowerbed.length; ++i) {
            realflowerbed[i + 1] = flowerbed[i];
        }

        // 擴展後的花床,3個一組檢查
        for (int i = 1; i < realflowerbed.length - 1; ++i) {
            if (realflowerbed[i] == 0 && realflowerbed[i - 1] == 0 && realflowerbed[i + 1] == 0) {
                // 種花
                realflowerbed[i] = 1;
                // 減去一朵花
                --n;
            }
        }
        // 沒花剩下就成功了
        return n <= 0 ? true : false;
    }
}

605. Can Place Flowers - Easy
https://f88083.github.io/2024/03/20/605-Can-Place-Flowers-Easy/
作者
Simon Lai
發布於
2024年3月20日
許可協議