h8743
V2EX  ›  Java

Java 实现 输入 AA 输出 AB ..输入 AZ 输出 BA 一直到输出 ZZ

  •  
  •   h8743 · Jun 5, 2019 · 6052 views
    This topic created in 2715 days ago, the information mentioned may be changed or developed.

    :)

    41 replies  •  2019-06-08 13:37:27 +08:00
    firefffffffffly
    firefffffffffly
    Jun 5, 2019❤️53
    1
    if(input == "AA") {
    System.out.println("AB");
    } else if(input == "AZ") {
    System.out.println("BA 一到输出 ZZ");
    }

    自己的作业自己做
    pcatzj
    pcatzj
    Jun 5, 2019 via Android❤️3
    2
    @firefffffffffly 像一楼这么优秀的人不多了
    fzy0728
    fzy0728
    Jun 5, 2019
    3
    @firefffffffffly 没毛病
    xmoiduts
    xmoiduts
    Jun 5, 2019 via Android
    4
    只有我是把字母变成数值,然后+1 再变回字母吗?
    smilenceX
    smilenceX
    Jun 5, 2019❤️1
    5
    可能我阅读理解不过关,没读懂题目。
    ipwx
    ipwx
    Jun 5, 2019
    6
    一楼不要这么绝情嘛~ 我来给楼主提个醒:

    AA = 0
    AB = 1
    ...
    ZZ = 26 * 26

    剩下的楼主自己想。
    ipwx
    ipwx
    Jun 5, 2019
    7
    不好意思,ZZ = 26 * 26 - 1
    quericy
    quericy
    Jun 5, 2019
    8
    一楼完美断句逻辑严谨 2333

    楼主可以从 ASCII 码着手思考一下
    axbx
    axbx
    Jun 5, 2019
    9
    题目写清楚一点吧
    mirrorman
    mirrorman
    Jun 5, 2019
    10
    取模运算
    mirrorman
    mirrorman
    Jun 5, 2019
    11
    相当于 26 进制加法
    maninfog
    maninfog
    Jun 5, 2019 via iPhone
    12
    @firefffffffffly 还是不严谨阿,字符串比较要用 equals 吧
    passerbytiny
    passerbytiny
    Jun 5, 2019
    13
    char[] chars = new char[]{A, B, ... , Z};

    for (char firstChar : chars) {
    for (char secondChar : chars ) {
    System.out.println(firstChar + secondChar );
    }
    }
    passerbytiny
    passerbytiny
    Jun 5, 2019
    14
    擦,跑题了
    h8743
    h8743
    OP
    Jun 5, 2019
    15
    @axbx 就是一个函数 输入 AA 输出 AB ..输入 AZ 输出 BA 一直到输出 ZZ
    hhhsuan
    hhhsuan
    Jun 5, 2019
    16
    26 进制
    h8743
    h8743
    OP
    Jun 5, 2019
    17
    @axbx 就是一个函数 输入 AA 输出 AB
    ..输入 AZ 输出 BA
    一直到 最大输入 ZY 输出 ZZ 输入 ZZ 时候 提示已到底
    youngfish
    youngfish
    Jun 5, 2019
    18
    public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String next = scanner.next();
    if (next.length() != 2) {
    System.out.println("输入值有误");
    return;
    }
    next = new StringBuilder(next).reverse().toString();
    StringBuilder result = new StringBuilder();
    int lastValue = 1;
    for (int i = 0; i < next.length(); i++) {
    lastValue = isAZ(next.charAt(i), lastValue, result);
    }
    System.out.println(result.reverse().toString());
    }

    private static int isAZ(char inputChar, int isAdd, StringBuilder result) {
    if (inputChar < 'A' || inputChar > 'Z') {
    System.out.println("输入的字符有误,请输入 A-Z");
    return 0;
    } else {
    if (isAdd == 0) {
    result.append(inputChar);
    return 0;
    }
    inputChar++;
    if (inputChar > 'Z') {
    inputChar = (char) ((inputChar - 65) % 26 + 65);
    result.append(inputChar);
    return 1;
    } else {
    inputChar = (char) ((inputChar - 65) % 26 + 65);
    result.append(inputChar);
    return 0;
    }
    }
    }
    passerbytiny
    passerbytiny
    Jun 5, 2019
    19
    char[] inputChars = input.toCharArray();
    String output = null;
    if (input.matches("[A-Z][A-Y]"){
    output = new StringBuilder().append(inputChars [0]).append(getNextAlphabet(inputChars [1]));
    } else if (input.matches("[A-Y]Z") {
    output = new StringBuilder().append(getNextAlphabet(inputChars [0]).append("A");
    } else if (input.equals("ZZ"){
    output = "到底了";
    } else {
    output = "Invalid input!";
    }

    char getNextAlphabet(char c){
    return (char)(((int)c) + 1);
    }
    passerbytiny
    passerbytiny
    Jun 5, 2019
    21
    @AntiGameZ #20 这个不是严格的 26 进制,我暂时还不知道怎么搞。
    brust
    brust
    Jun 5, 2019
    22
    字母版的 26 进制吗
    passerbytiny
    passerbytiny
    Jun 5, 2019❤️1
    23
    @AntiGameZ #20 这东西要用矩阵去求取,不能用 26 进制。

    public class ExcelSheetColumnTitle {
    static Map<Integer, Character> index2titleMap = new HashMap<>();
    static {
    index2titleMap.put(1, 'A');
    index2titleMap.put(2, 'B');
    index2titleMap.put(3, 'C');
    index2titleMap.put(4, 'D');
    index2titleMap.put(5, 'E');
    index2titleMap.put(6, 'F');
    index2titleMap.put(7, 'G');
    index2titleMap.put(8, 'H');
    index2titleMap.put(9, 'I');
    index2titleMap.put(10, 'J');
    index2titleMap.put(11, 'K');
    index2titleMap.put(12, 'L');
    index2titleMap.put(13, 'M');
    index2titleMap.put(14, 'N');
    index2titleMap.put(15, 'O');
    index2titleMap.put(16, 'P');
    index2titleMap.put(17, 'Q');
    index2titleMap.put(18, 'R');
    index2titleMap.put(19, 'S');
    index2titleMap.put(20, 'T');
    index2titleMap.put(21, 'U');
    index2titleMap.put(22, 'V');
    index2titleMap.put(23, 'W');
    index2titleMap.put(24, 'X');
    index2titleMap.put(25, 'Y');
    index2titleMap.put(26, 'Z');
    }

    public String valueToTitle(int n) {
    int row = n / 26;
    int column = n % 26;
    if (column == 0) {
    row -= 1;
    column = 26;
    }

    if (row == 0) {
    return String.valueOf(index2titleMap.get(column));
    } else if (row >= 1 && row <= 26) {
    return new StringBuilder().append(index2titleMap.get(row)).append(index2titleMap.get(column)).toString();
    } else {
    return null;
    }
    }
    }
    msaionyc
    msaionyc
    Jun 5, 2019
    25
    @passerbytiny 老哥你这 26 行 put 方法写的不累吗?万一哪行写错了怎么办
    jason19659
    jason19659
    Jun 5, 2019
    26
    @firefffffffffly
    得用 equals
    if( "AA".equals(input)) {
    System.out.println("AB");
    } else if("AZ".equals(input)) {
    System.out.println("BA 一到输出 ZZ");
    }
    NoKey
    NoKey
    Jun 5, 2019❤️1
    27
    一楼最优秀。。。
    26 楼最认真。。。
    over
    woscaizi
    woscaizi
    Jun 5, 2019 via iPhone
    28
    转为 char 数组,直接 char +1,逢 27 进 1
    yoke123
    yoke123
    Jun 5, 2019
    29
    秀的头皮发麻 老铁 没毛病
    vulgur
    vulgur
    Jun 5, 2019
    30
    MineDog
    MineDog
    Jun 5, 2019 via Android
    31
    应该是 2 位 27 进制自增返回才对
    yumenawei
    yumenawei
    Jun 5, 2019
    32
    竟然真有老哥给答案。
    MineDog
    MineDog
    Jun 5, 2019
    33
    想错了,还是 26 进制

    public String func (String str){
    char[] cs = str.toCharArray();
    if(cs.length!=2 || cs[0]< 'A' || cs[0] < 'Z' || cs[1]< 'A' || cs[1] > 'Z' ){
    throw new IllegalArgumentException(String.format("参数错误:%s", str));
    }
    cs[1]++;
    if(cs[1]>'Z'){
    cs[0]++;
    cs[1]='A';
    }
    if(cs[0]>'Z'){
    throw new IllegalArgumentException(String.format("参数错误 : %s", str));
    }
    return String.valueOf(cs[0]) + String.valueOf(cs[1]);
    }
    zjp
    zjp
    Jun 5, 2019 via Android
    34
    通用说是字典序,不过这里不用这么麻烦
    zsdroid
    zsdroid
    Jun 5, 2019
    35
    <?php
    //php 是世界上最好的语言
    $input = 'AA';
    echo ++$input;//AB

    $input = 'ZY';
    echo ++$input;//ZZ
    ?>
    itechify
    itechify
    Jun 5, 2019 via Android
    36
    @firefffffffffly 除了不用 equals,input 输入变量不在在后面防止空指针外,没挑出毛病了!
    fmumu
    fmumu
    Jun 5, 2019 via Android
    37
    26 进制?
    small2Sun
    small2Sun
    Jun 5, 2019 via Android
    38
    @firefffffffffly 它要输出 AB..
    wenzhoou
    wenzhoou
    Jun 6, 2019
    39
    public static int c2i(String s) {
    return s.length() == 1 ? s.charAt(0)-'A' : c2i(s.substring(0, s.length()-1))*26 + (s.charAt(s.length()-1)-'A');
    }
    public static String i2c(int i) {
    return i < 26 ? ("" + (char)('A' + i)) : i2c(i/26) + i2c(i%26);
    }

    public static String padTo2Digit(String s) {
    return ("A" + s).substring(s.length()-1);
    }

    String input = "AA";
    System.out.println(padTo2Digit(i2c(c2i(input)+1)));
    passerbytiny
    passerbytiny
    Jun 6, 2019
    40
    @AntiGameZ #20
    @ipwx #24
    LeetCode 不太会用😥,怎么用的,提交成功后貌似只能自己看,讨论区要另外创建内容。
    矩阵方式的代码,提交的时候被拒了,其测试用例要求的是 AAA 甚至更多字母都要被解析,而我那个最多支持到两位字母。后来搞了个很难以理解的方式,能支持解析 int 的全部范围。
    话说 LeetCode 貌似是为了防止 1 楼的方式,隐藏了实际的测试用例,然而用起来很不爽,要到提交的时候才知道自己跑题了。
    Aresxue
    Aresxue
    Jun 8, 2019
    41
    26 进制,自己不能好好做作业嘛
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4682 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 85ms · UTC 01:43 · PVG 09:43 · LAX 17:43 · JFK 20:43
    ♥ Do have faith in what you're doing.