leetcode腾讯50题-54-59-61

54. 螺旋矩阵

给定一个包含mxn个元素的矩阵(m行,n列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

分析:考虑单独一行或者单独一列的输出顺序。

class Solution {

public:

    vector spiralOrder(vector>& matrix) {

        //难点是确定上下左右操作的边界

        vectorres;

        int n=matrix.size();//row

        int m=matrix[0].size();

        for(int i=0;i<(n+1)/2;i++)

        {//只有一行时,需要上操作完成,只有一列时,需要上右操作

            //shang

            for(int j=i;j

            res.push_back(matrix[i][j]);

            //you

            for(int j=i+1;j=i;j++)

            res.push_back(matrix[j][m-1-i]);

            //xia

            for(int j=m-2-i;j>=i&&n-1-i>i;j--)

            res.push_back(matrix[n-1-i][j]);

            //zuo

            for(int j=n-2-i;j>i&&i

            res.push_back(matrix[j][i]);

        }

        return res;

    }

};

59. 螺旋矩阵 II

给定一个正整数n,生成一个包含 1 到n2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。

//比上道题简单些,套路一致。

class Solution {

public:

    vector> generateMatrix(int n) {

        vector>res(n);

        for(int i=0;i

        res[i].resize(n);

        int k=1;

        for(int i=0;i<(n+1)/2;i++)

        {

            for(int j=i;j

            res[i][j]=k++;

            for(int j=i+1;j

            res[j][n-1-i]=k++;

            for(int j=n-2-i;j>=i;j--)

            res[n-1-i][j]=k++;

            for(int j=n-2-i;j>i;j--)

            res[j][i]=k++;

        }

        return res;

    }

};

61. 旋转链表

给定一个链表,旋转链表,将链表每个节点向右移动个位置,其中是非负数。

分析:判断k是否超出节点个数,超出取余数,之后在循环过程,k次更新整个链表。

/**

 * Definition for singly-linked list.

 * struct ListNode {

 *     int val;

 *     ListNode *next;

 *     ListNode() : val(0), next(nullptr) {}

 *     ListNode(int x) : val(x), next(nullptr) {}

 *     ListNode(int x, ListNode *next) : val(x), next(next) {}

 * };

 */

class Solution {

public:

    ListNode* rotateRight(ListNode* head, int k) {

    if(head==nullptr||k==0)return head;

    int num=0;

    ListNode*p=head;

    while(p!=nullptr)

    {

        num++;

        p=p->next;

    }

    if(k>=num) k%=num;

    int temp_pre,temp_cur;

    while(k--)

    {

        p=head;


        temp_pre=p->val;

        while(p->next!=nullptr)

        {

            temp_cur=p->next->val;

            p->next->val=temp_pre;

            temp_pre=temp_cur;

            p=p->next;

        }

        head->val=temp_pre;    

    }

    return head;

    }

};

你可能感兴趣的:(leetcode腾讯50题-54-59-61)