Writing a string in a spiral

后端 未结 11 1039
别那么骄傲
别那么骄傲 2020-12-30 11:29

I had recently participated in coding competion sponsored by an company and there was this one question which I did not understood, as to what was it asking.

Here i

11条回答
  •  时光取名叫无心
    2020-12-30 11:37

    //in c++

    string convert(const string & s) { int len = s.size();

        //base case
        if (len == 0) return string("");
    
        // minimum square calculation
        int i = 1;
        while (i*i < len) ++i;
        //cout << "i=" << i << endl;
    
        //matrix initialization
        vector > matrix;
        matrix.resize(i);
        for (int j = 0; j < i; ++j)
                matrix[j].resize(i);
        for (int j = 0; j < i; ++j)
                for (int k = 0; k < i; ++k)
                        matrix[j][k] = ' ';
    
        //logic
        int r = 0, c = 0;
        bool right = true, down = false, left = false, up = false;      
        int curr_len = 0;
        int side = i - 1;
        while (curr_len < len)
        {
                if (right)
                {
                        for (int j = 1; (j <= side) && ((curr_len+j) <= len); ++j)
                        {
                                matrix[r][c] = s[curr_len];
                                //cout << curr_len << "|" << r << "|" << c << "|" << matrix[r][c] << "\n";
                                ++c;
                                ++curr_len;
                        }
    
                        right = false;
                        down = true;
                }
    
                if (down)
                {
                        for (int j = 1; (j <= side) && ((curr_len+j) <= len); ++j)
                        {
                                matrix[r][c] = s[curr_len];
                                //cout << curr_len << "|" << r << "|" << c << "|" << matrix[r][c] << "\n";
                                ++r;
                                ++curr_len;
                        }
    
                        down = false;
                        left = true;
                }
    
                if (left)
                {
                        for (int j = 1; (j <= side) && ((curr_len+j) <= len); ++j)
                        {
                                matrix[r][c] = s[curr_len];
                                //cout << curr_len << "|" << r << "|" << c << "|" << matrix[r][c] << "\n";
                                --c;
                                ++curr_len;
                        }
    
                        left = false;
                        up = true;
                }
    
                if (up)
                {
                        for (int j = 1; (j <= side) && ((curr_len+j) <= len); ++j)
                        {
                                matrix[r][c] = s[curr_len];
                                //cout << curr_len << "|" << r << "|" << c << "|" << matrix[r][c] << "\n";
                                --r;
                                ++curr_len;
                        }
    
                        up = false;
                        right = true;
                        side = side - 2;
                        ++r; ++c;
                }
        }
    
        stringstream ss;
    
        for (int j = 0; j < i; ++j)
        {
                for (int k = 0; k < i; ++k)
                {
                        ss << matrix[j][k];
                }
        }
    
        return ss.str();
    

    }

提交回复
热议问题