原创编程题:字符串模拟T9手机键盘

题目描述

假设你有一个T9手机键盘,其中每个键可能代表多个字符(如2代表’a’,‘b’,‘c’)。给出一个数字序列,要求你输出所有可能的字符串组成。

输入格式

第一行是一个整数n,表示数字序列的长度。
第二行是一个字符串s,其中s[i]是第i个数字。

输出格式

所有可能的字符串,每个字符串占一行。

约束

1<=n<=12
s[i]是’0’到’9’之间的一个字符。

样例

输入

3
234

输出

adg
adh
adi
aeg
aeh
aei
afg
afh
afi
bdg
bdh
bdi
beg
beh
bei
bfg
bfh
bfi
cdg
cdh
cdi
ceg
ceh
cei
cfg
cfh
cfi

算法:(深度优先搜索+字符串模拟) O ( 3 n ) O(3^n) O(3n)

C++ 标程

#include<iostream>
#include<cstring>
using namespace std;
const char num[10][5]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
string s;
void dfs(string s,string ans,int i){
    if(i==s.size()){
        cout<<ans<<endl;
        return;
    }
    for(int j=0;j<strlen(num[s[i]-'0']);j++)
        dfs(s,ans+num[s[i]-'0'][j],i+1);
}
int main(){
    cin>>s;
    dfs(s,"",0);
    return 0;
}

说明

  • 时间复杂度: O ( 3 n ) O(3^n) O(3n), 空间复杂度 O ( n ) O(n) O(n)
  • 题目要求我们枚举所有可能的字符串,那么我们可以使用深度优先搜索来枚举所有的情况。在深度优先搜索中,我们使用两个参数,一个是原始的数字串s,另一个是当前已经搜索到的字符串ans,每次搜索到一个数字,我们就遍历其对应的所有字符,并将其添加到ans字符串中,然后继续搜索下一个数字,直到所有的数字都搜索完毕,输出ans字符串即可。代码中使用了一个num数组,用来存储每个数字对应的字符。该算法的时间复杂度为 O ( 3 n ) O(3^n) O(3n), 空间复杂度 O ( n ) O(n) O(n)
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小刘较瘦

打赏即动力,打赏即鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值