您的位置:首页 > 其它

数字字符串解码为字母

2015-10-10 09:28 239 查看
题目:将一串数字字符串,解码为一串字母。比如1234,可以为abcd,也可以为lcd,awd,abcd。

思想:采用递归的方式,每两个为一组进行遍历,一组又可以拆分为两个待解字符或者结合为一个待解字符。#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
char letter[] = {'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't',
'u', 'v', 'w', 'x', 'y', 'z'};
void print(char *decode, int size)
{
int i = 0;
for(i = 0; i < size; i++)
{
printf("%c", decode[i]);
}
printf("\n");
}
/*
code: 待解码字符串
decode: 已解码字符串
len: code的长度
code_cur: 未解码字符串索引
decode_cur: 已解码字符串索引
size:decode: 已有字符的长度
*/
void decodeFun(char *code, char *decode, int len, int code_cur,
int decode_cur, int size)
{
int i = 0;
int number = 0, step = 0;
if(code_cur == len)
{
print(decode, size);
}
else
{
for(i = 0; i < 2; i++)
{
//每两个字符为一组,有两种组合方式:
//1.两个为一个字符,2.一个为一个字符
//所以循环两次
if(i == 0)
{
if(len - code_cur > 1) //如果剩余不够两个
{
number = (code[code_cur] - '0') * 10 +
code[code_cur + 1] - '0' - 1;
step = 2;
}
else
{
continue;
}
}
else
{
number = code[code_cur] - '0' - 1;
step = 1;
}
if(number < 26)
{
decode[decode_cur] = letter[number]; //获取解码字符
decodeFun(code, decode, len, code_cur + step,
decode_cur + 1, size + 1); //进行下次递归
}
}
}
}

int main()
{
int n = 0;
scanf("%d", &n);
char *code = (char *)malloc(n * sizeof(char));
char *decode = (char *)malloc(n * sizeof(char));
scanf("%s", code);
decodeFun(code, decode, n, 0, 0, 0);
}

.


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  递归 解码 数字组合