• *的字母组合


    /*
    给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
    给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
    */
    #include<stdio.h>
    #include<malloc.h>
    #include<string.h>
    #include<stdlib.h>
    #include<math.h>
    #include<string.h>
    #include <iostream>
    typedef struct Hash{
        char ch;
        int iLen;
        char data[5];
    }HASH;
    
    HASH Hash[10]={
        '0',  0, "",
        '1',  3, "!@#",
        '2',  3, "abc",
        '3',  3, "def",
        '4',  3, "ghi",
        '5',  3, "jkl",
        '6',  3, "mno",
        '7',  4, "pqrs",
        '8',  3, "tuv",
        '9',  4, "wxyz",
    };
    //判断输入字符串是否有效,并且输出有多少种字母组合
    int JudgeInput(char* pInput,int* pRangeNum){
        int iRange=1,numSize,i=0,iLen=0;
        while(pInput[i]!=''){
            if(pInput[i]>='2'&&pInput[i]<='9'){
                iRange*=Hash[pInput[i]-'0'].iLen;
                i++;
                iLen++;
            }else{
                iLen=0;
                break;
            }
        }
        *pRangeNum = iRange;
        return iLen;
    }
    
    char ** letterCombinations(char* digits, int* returnSize){
        char **ppRet;
        int numsSize,i,j,k,numsRange,interval;
        numsSize = JudgeInput(digits,&numsRange);
        ppRet=(char**)malloc(sizeof(char*)*numsRange);
        interval=numsRange;
        k=numsRange;
        * returnSize=numsRange;
    
        if(numsSize<=0){
            *returnSize=0;
            return NULL;
        }
    
        printf("[2] numsSize=%d iRangeNum=%d
    ",numsSize,numsRange);
    
        for(i=0;i<numsSize;i++){
            k=Hash[digits[i]-'0'].iLen;
            interval/=k;
            for(j=0;j<numsRange;j++){
                if(i==0){
                    ppRet[j]=(char*)malloc(sizeof(char)*(numsSize+1));
                    ppRet[j][numsSize]='';
                }
                ppRet[j][i] = Hash[digits[i]-'0'].data[(j/interval)%k];
                printf("[3] i=%d j=%d k=%d ppRet=%c
    ",i,j,k,ppRet[j][i]);
            }
        }
        return ppRet;
    }
    int main()
    {
        char digits[]={'2','3'};
        char **ppRet;
        int* returnSize;
        ppRet = letterCombinations(digits,returnSize);
        return 0;
    }
  • 相关阅读:
    D3js-实现图形拖拽及双击恢复
    D3js-三种图表tooltip提示框总结介绍
    D3js-API介绍【英】
    D3js-API介绍【中】
    springboot 整合 activemq 同时使用点对点模式和发布订阅模式
    docker 安装 activemq
    nginx 配置websocket 400 问题
    springboot +vue 整合websocket 403
    m3u8下载器
    linux scp 命令
  • 原文地址:https://www.cnblogs.com/zhaohuan1996/p/12613816.html
Copyright © 2020-2023  润新知