猿辅导第一题AC代码

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int num = Integer.parseInt(in.nextLine());
        String[] strArr = new String[num];
        for (int i = 0; i < num; i++) {
            strArr[i] = in.nextLine();
        }
        for (int i = 0; i < num; i++) {
            System.out.println(decodeString(strArr[i]));
        }
    }

    public static String decodeString(String s) {

        String ret = "";
        for (int i = 0; i < s.length(); ) {
            if (s.charAt(i) >= '0' && s.charAt(i) <= '9') {
                int tempIndex2 = i;
                //可能出现11,01这种数字
                while (i < s.length() && s.charAt(i) >= '0' && s.charAt(i) <= '9') {
                    i++;
                }
                int freq1 = Integer.parseInt(s.substring(tempIndex2, i));
                //找到a10中的a字符
                String c = ret.charAt(ret.length() - 1) + "";
                //将a10变为aaaaaaaaaa
                ret = ret.substring(0, ret.length() - 1) + multiStr(c, freq1);

            } else if (s.charAt(i) == '(') {

                int weight = 0;
                //找到与i位置的[相匹配的右括号]的索引位置
                int j = i;
                for (; j < s.length(); j++) {
                    if (s.charAt(j) == '(') {
                        weight++;
                    } else if (s.charAt(j) == ')') {
                        weight--;
                        if (weight == 0) {
                            break;
                        }
                    }
                }
                //数字开始
                int tempI = j + 1;
                while (tempI < s.length() && s.charAt(tempI) >= '0' && s.charAt(tempI) <= '9') {
                    tempI++;
                }
                //找到频率
                int freq2 = Integer.parseInt(s.substring(j + 1, tempI));

                ret += multiStr(decodeString(s.substring(i + 1, j)), freq2);
                i = tempI;
            } else {
                //纯字符,直接+
                ret += s.charAt(i);
                i++;
            }

        }

        return ret;

    }


    private static String multiStr(String str, int freq) {
        String ret = "";
        if (freq == 0) {
            return ret;
        }
        for (int i = 0; i < freq; i++) {
            ret += str;
        }
        return ret;
    }
}

#猿辅导##笔试题目#
全部评论
大佬,这线下让我看都得研究半天😂,果然菜是原罪呀
点赞 回复 分享
发布于 2019-08-03 20:48
#include <iostream> #include <string> using namespace std; string helper(string& s, int& index) {     string res, tmp;     int x = 0;     while(index < s.size()) {         if(s[index] == '('){ #遇到左括号递归开始             index++;             res += helper(s,index);         }else if(s[index] == ')') { #遇到右括号计算后面的数字,算完之后return             index++;             while(s[index] >= '0' && s[index] <= '9') {                 x = x*10+(s[index++]-'0');             }             tmp = res;             while(--x)                 res += tmp;             return res;         }else if(s[index] >= '0' && s[index] <= '9') {#直接遇到数字说明是单个字母的重复             x = 0;             while(s[index] >= '0' && s[index] <= '9') {                 x = x*10+(s[index++]-'0');             }             while(--x)                 res += res.back();         }         else{#其它字母直接加             res += s[index++];         }     }     return res; } int main() {     int n = 0,index = 0;     string s;     getline(cin,s);     n = stoi(s);     for(int i = 0; i < n; i++) {         getline(cin,s);         index = 0;         string res = helper(s,index);         cout << res <<endl;     }     return 0; } 来个C++版的
点赞 回复 分享
发布于 2019-08-03 20:58
tql
点赞 回复 分享
发布于 2019-08-03 20:48
膜拜,大佬,你a了几道
点赞 回复 分享
发布于 2019-08-03 20:48
tql
点赞 回复 分享
发布于 2019-08-03 20:49
大佬最后一题是dp吗,但为啥我的只有10%
点赞 回复 分享
发布于 2019-08-03 20:50
public class Test03 { public static void main(String[] args) { int dp[][] = new int[1000][1000]; Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int m = scanner.nextInt(); dp[0][1] = 1; dp[1][n] = 1; dp[1][2] = 1; for (int i = 1; i < m; i++) { for (int j = 1; j < n; j++) { if (j == 1) { dp[i][j] = dp[i - 1][n] + dp[i - 1][2]; } else if (j == n) { dp[i][j] = dp[i - 1][1] + dp[i - 1][n - 1]; } else { dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j + 1]; } } } System.out.println(dp[m][1]); } }
点赞 回复 分享
发布于 2019-08-03 20:51
大佬!!学习
点赞 回复 分享
发布于 2019-08-03 20:52
大佬20行,44行是不是有点问题啊,复制到idea报错
点赞 回复 分享
发布于 2019-08-03 20:55
跟你思路差不多,但是就是写不出来,哎练得还是少啊,向大佬看齐
点赞 回复 分享
发布于 2019-08-03 20:57

相关推荐

虚闻松声:很顶的简历,不改也没啥问题。 两点建议 1. 细化项目经历。关于【负责内容】可以稍微再具体一些,重点项目可以写两三个大的模块,以列表形式展开。同时适当提一下项目最终的效果。 2. 适当精炼表达。课程写一行足矣;荣誉奖项,写成一两行吧;CET-6再加一句话就行了,4 没必要写 CV、求职等咨询,欢迎私信交流。
投递中科院自动化所等公司9个岗位 > 听劝,这个简历怎么改
点赞 评论 收藏
分享
评论
点赞
27
分享

创作者周榜

更多
牛客网
牛客企业服务