勉強看懂了~但是~寫不出來啊啊啊~~~(抱頭)
bool isDigit(char a)
{
    if (a-'0' >=2 && a-'0'<= 9)
        return true;
    else 
        return false;
}
char* decodeAtIndex(char* s, int k) {
    int len = strlen(s);
    long long total_len=0;
    for (int i=0 ; i<len; i++)
    {
        if (isDigit(s[i]))
            total_len = total_len* (s[i]-'0');
        else
            total_len++;
    }
    for (int i=len-1; i>=0; i--)
    {   
        if (isDigit(s[i]))
        {
            total_len=total_len/(s[i]-'0');
            k=k%total_len;
        }
        else
        {
            if ((k==0) || (k==total_len))
            {
                s[i+1]='\0';
                return s+i;
            }
            total_len--;
        }
    }
    return "";
}
暴力法
bool isDigit(char a)
{
    if (a-'0' >=2 && a-'0'<= 9)
        return true;
    else 
        return false;
}
char* decodeAtIndex(char* s, int k) {
    int top = -1;
    int len = strlen(s);
    char *ret = calloc (k+1, sizeof(char));
    for (int i=0 ; i<len; i++)
    {
        if (top == k-1)
            return ret+top;
        if (!isDigit(s[i]))
        {
            ret[++top]=s[i];
            continue;
        }
        int repeat = s[i]-'0'-1 ;
        int local_len = top+1;
        int all = local_len* repeat;
        for (int j=0;j<repeat;j++)
        {
            for (int z=0; z<local_len; z++)
            {
                if (top == k-1)
                {
                    return ret+top;
                }
                ret[++top]=ret[z];
            }
        }
    }
    return ret+top;
}
 
沒有留言:
張貼留言