• [剑指Offer]46-把数字翻译成字符串(递归思想,循环实现)


    题意

    '0'到'25'翻译成'a'到'z',故一个字符串可以有多种翻译方式,如12258有五种翻译方式。
    给定字符串,输出有多少种翻译方式

    解题思路

    递归思想

    • 计f(i)为以第i个字符开始到原字符串结尾的串可翻译的方式数
    • 则f(i)=f(i+1)+g(i,i+1)*f(i+2);其中g函数为判定i,i+1位置对应的两个字符连在一起是否在0-25范围内的函数,是则返回1,否则返回0。

    用循环实现,由小及大,故从后向前遍历。
    时间负责度O(n).

    代码

    #include <iostream>
    #include <string>
    using namespace std;
    
    int inScope(char num1,char num2){
        int number=(num1-'0')*10+(num2-'0');
        if(number>=0&&number<=25){
            return 1;
        }
        else{
            return 0;
        }
    }
    
    int transMeansCnt(string str){
        if(str.empty()){
            return 0;
        }
        
        int meansCnt[str.length()];
        int endIdx=(int)str.length()-1;
        for(int i=endIdx;i>=0;--i){
            if(i==endIdx){
                meansCnt[i]=1;
            }
            else if(i==endIdx-1){
                meansCnt[i]=meansCnt[i+1]+inScope(str[i],str[i+1]);
            }
            else{
                meansCnt[i]=meansCnt[i+1]+inScope(str[i],str[i+1])*meansCnt[i+2];
            }
        }
        return meansCnt[0];
    }
    
    int main(int argc, const char * argv[]) {
        string s="12258";
        int meansCnt=transMeansCnt(s);
        cout<<meansCnt<<endl;
        return 0;
    }
    
    
  • 相关阅读:
    Python反射机制
    并发和并行的区别
    I/O模型
    python 字符串零散方法记录
    python 关于占位符格式化
    Python 十进制转二进制、八进制、十六进制
    python中str函数isdigit、isdecimal、isnumeric的区别
    文件的修改
    LF 模块三
    stackoverflow os.path.abspath and os.path.realpath
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10556933.html
Copyright © 2020-2023  润新知