leetcode 91. 解码方法

    科技2022-07-16  106

    一条包含字母 A-Z 的消息通过以下方式进行了编码:

    'A' -> 1 'B' -> 2 ... 'Z' -> 26 给定一个只包含数字的非空字符串,请计算解码方法的总数。

    题目数据保证答案肯定是一个 32 位的整数。

    示例 1:

    输入:“12” 输出:2 解释:它可以解码为 “AB”(1 2)或者 “L”(12)。 示例 2:

    输入:“226” 输出:3 解释:它可以解码为 “BZ” (2 26), “VF” (22 6), 或者 “BBF” (2 2 6) 。 示例 3:

    输入:s = “0” 输出:0 示例 4:

    输入:s = “1” 输出:1 示例 5:

    输入:s = “2” 输出:1

    提示:

    1 <= s.length <= 100 s 只包含数字,并且可以包含前导零。

    来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/decode-ways 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    动态规划得实现方法:

    int numDecodings(char * s){ if (!s){ return 0; } long *ans = malloc(sizeof(long) * 102); int len = strlen(s); ans[0] = 1; for (int i = 1; i <= len; i++){ ans[i] = 0; if (s[i - 1] - '0' >= 1 && s[i - 1] - '0' <= 9){ ans[i] += ans[i - 1]; } printf("i:%d, ans[i]:%d\n", i, ans[i]); if (i > 1){ printf("i:%d, ans[i]:%d\n", i, ans[i]); int y = 10 * (s[i - 2] - '0') + s[i - 1] - '0'; if (y >= 10 && y <= 26) { ans[i] += ans[i - 2]; } } } return ans[len]; }
    Processed: 0.009, SQL: 8