zoukankan      html  css  js  c++  java
  • [剑指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;
    }
    
    
  • 相关阅读:
    SAMBA服务初学练习
    NFS与AutoNFS实例
    NTP服务简介
    DHCP服务简单搭建步骤
    HBase文档操作--练习篇
    Hadoop体系结构管理
    HBase表结构设计--练习篇
    HBase备份恢复练习
    MongoDB管理练习
    24_BlockingQueue接口
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/10556933.html
Copyright © 2011-2022 走看看