【leetcode C語言實(shí)現(xiàn)】劍指 Offer 13.機(jī)器人的運(yùn)動范圍

題目描述

地上有一個(gè)m行n列的方格,從坐標(biāo) [0,0] 到坐標(biāo) [m-1,n-1] 。一個(gè)機(jī)器人從坐標(biāo) [0, 0] 的格子開始移動,它每次可以向左、右、上、下移動一格(不能移動到方格外),也不能進(jìn)入行坐標(biāo)和列坐標(biāo)的數(shù)位之和大于k的格子。例如,當(dāng)k為18時(shí),機(jī)器人能夠進(jìn)入方格 [35, 37] ,因?yàn)?+5+3+7=18。但它不能進(jìn)入方格 [35, 38],因?yàn)?+5+3+8=19。請問該機(jī)器人能夠到達(dá)多少個(gè)格子?

示例 1:

輸入:m = 2, n = 3, k = 1
輸出:3
示例 2:

輸入:m = 3, n = 1, k = 0
輸出:1
提示:

1 <= n,m <= 100
0 <= k <= 20

解題思路

以行為單位,依次遍歷每一個(gè)方格,若方格滿足被進(jìn)入條件則將此網(wǎng)格進(jìn)行標(biāo)記。判斷條件有如下:
1、一行的第一個(gè)方格,且行坐標(biāo)和列坐標(biāo)的數(shù)位之和不大于k;
2、該方格的上面方格或者左方方格被標(biāo)記,且行坐標(biāo)和列坐標(biāo)的數(shù)位之和不大于k;
終止條件:某一行的所有方格都不能進(jìn)入則終止。

代碼

int movingCount(int m, int n, int k){
    int i, j, sum_i = 0, sum_j = 0, count_sum = 0, count_i = 0;
    int visited[m][n];

    for (i = 0; i < m; i++)
    {
        count_i = 0;
        sum_i = i / 10 + i % 10;
        for (j = 0; j < n; j++)
        {
            sum_j = j / 10 + j % 10;
            if(((j == 0) || ((j > 0) && (visited[i][j - 1] == 1)) || ((i > 0) && (visited[i - 1][j] == 1))) && (sum_i + sum_j <= k))
            {
                visited[i][j] = 1;
                count_i++;
            }
            else
            {
                visited[i][j] = 0;
            }
        }

        // 若其中某行沒有任何一個(gè)滿足條件的格子,則結(jié)束
        if(count_i == 0)
        {
            break;
        }
        else
        {
            count_sum += count_i;
        }
    }
    return count_sum;
}

測試代碼及結(jié)果

#include<stdio.h>

int main(void)
{
    int count1, count2, count3, count4;

    // 功能測試
    count1 = movingCount(10, 10, 15);
    printf("%d\n", count1);
    count2 = movingCount(5, 4, 6);
    printf("%d\n", count2);

    // 邊界值測試
    count3 = movingCount(5, 1, 2); // 多行一列
    printf("%d\n", count3);
    count4 = movingCount(1, 8, 5); // 一行多列
    printf("%d\n", count4);

    // 特殊輸入測試
    count3 = movingCount(3, 3,-2); // k為負(fù)數(shù)
    printf("%d\n", count3);
}

執(zhí)行代碼

時(shí)間復(fù)雜度:O(n) = n^2,空間復(fù)雜度:O(1)。


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

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