字母键盘问题,但带有字符串函数(Java)

Posted

技术标签:

【中文标题】字母键盘问题,但带有字符串函数(Java)【英文标题】:Letter Keypad problem but with String Function(Java) 【发布时间】:2020-05-21 16:05:37 【问题描述】:

我被一个递归问题困住了。这是字母键盘问题(问题是从一个数字中打印所有可能的组合,其中数字与字母相关的方式与电话键盘上的相同)!我无法解决它的原因是我需要制作一个 String 函数,但我不知道如何让它工作!我已经发布了我为解决这个问题而制作的 2 个函数,但它们给出了错误的答案。

输入:23

预期输出:ad ae af bd be bf cd ce cf

我得到的输出:cf

final static char[][] codes =  ' ',' ',' ', ' ',' ',' ', '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'  ; 
//java
static char c[];

public static void printKeyWords(int num[] , int current , int n )  

    int i;
    if (current  == n)  
        return;
    

    for (i = 0; i < codes[num[current]].length; i++)         

        c[current] = codes[num[current]][i];
        printKeyWords(num , current +1 , n);
        if(num[current] == 0 || num[current] == 1)
                return;

     



// Return a string array that contains all the possible strings
public static String[] keypad(int input)
    String s= Integer.toString(input);
    int num [] = new int[s.length()];
    for (int i = 0; i < s.length(); i++)
        num[i] = s.charAt(i) - '0';
    

    c = new char[num.length + 1];
    printKeyWords(num , 0 ,num.length);

    String str = new String(c);
    String strArray[] = str. split(" ");

    return strArray;

【问题讨论】:

请告诉我你想要的输入和输出 能否在您的文字中描述“字母键盘问题”? 当你设置最后一个字符时(当 current 等于 n 减一时),你需要把它记录为一个解。您只在递归结束后查看解决方案,因此您只会看到最后一个解决方案。此外,没有理由拆分字符串。另外,为什么c 的大小为num.length + 1+ 1 是干什么用的?此外,您需要一个 List&lt;String&gt; 来附加解决方案。你事先不知道会有多少解决方案。 (理论上你可以计算出这个数字;实际上,只需使用 List 并添加它。) @DavidConrad 对不起,我还是个新手。所以我不知道如何使用List&lt;String&gt;。因此我遇到了一个很大的问题,因为这是我从互联网上找到的旧代码。我尽力挽救每一点,所以有一些我自己不知道的部分,但我把它们留在那里希望它们能工作 哦!我很抱歉 !我马上就做@ggorlen 【参考方案1】:

遍历所有案例以找到组合,只要 n == num.lengh 打印出组合。

static int[] num;

public static String printKeyWords(int n, String s)
    if (n == num.length) 
        return s + " ";
    
    String temp = "";
    for (int j = 0; j<codes[num[n]].length; j++)
        temp += printKeyWords(n+1, s+ codes[num[n]][j]);
    
    return temp;


public static String[] keypad(int input)
    String s= Integer.toString(input);
    num = new int[s.length()];
    for (int i = 0; i < s.length(); i++)
        num[i] = s.charAt(i) - '0';
    
    return printKeyWords(0,"").split(" ");

你应该用 int [] num 代替 int num [] 会更易读

【讨论】:

感谢您的努力。但根据我的问题,public static void keypad(int input) 应该是 String[] 函数而不是 void

以上是关于字母键盘问题,但带有字符串函数(Java)的主要内容,如果未能解决你的问题,请参考以下文章

JAVA 统计键盘输入的一个字符串中的数字,字母大小写和其他。

在JAVA中,键盘输入的字符串中包含的字母、数字和其他字符的个数如何制作?

iPhone中文本字段的键盘-使用字母数字字符

带有特殊字符的java密码检查器

Python中如何从键盘中输入字符串,统计字母,数字,符号和空格的个数?

用JAVA编写一程序:从键盘输入多个字符串到程序中,并将它们按逆序输出在屏幕上。