Datawhale刷题-66-724-189-48-54-498

66


class Solution {

public:

    vector<int> plusOne(vector<int>& digits) {

        int n=digits.size();

        int d=0;

       for(int i=n-1;i>=0;i--)

       {

           d+=digits[i]+((i==n-1)?1:0);

           digits[i]=d%10;

           d=d/10;

           if(!d)break;

       }

       if(d){

           digits.resize(n+1);

           for(int i=n;i>0;i--)

           digits[i]=digits[i-1];

           digits[0]=1;

       }

       return digits;

    }

};

724

class Solution {

public:

    int pivotIndex(vector<int>& nums) {

        double sum=0;

        int n=nums.size();

        for(auto i:nums)sum+=i;

        int left,right=0;

        left=0;

        right=sum-left-nums[0];

        if(left==right)return 0;

        for(int j=1;j<n;j++)

        {

            left=left+nums[j-1];

            right=sum-left-nums[j];

            if(left==right)return j;

        }

        return -1;

    }

};

189

class Solution {

public:

    void rotate(vector<int>& nums, int k) {

        int n=nums.size();

        k%=n;

        vector<int>temp(n);

        for(int i=0;i<n;i++)

        {

            temp[(i+k)%n]=nums[i];

        }

        copy(temp.begin(),temp.end(),nums.begin());

    }

};

48旋转图像

思路:先对角元素交换,再同一行中左右两侧对应位置交换元素。

class Solution {

public:

    void rotate(vector<vector<int>>& matrix) {

        int n=matrix.size();

        for(int i=0;i<n;i++)

        {

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

            {

                swap(matrix[i][j],matrix[j][i]);

            }

        }

        for(int i=0;i<n;i++)

        {

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

            {

                swap(matrix[i][j],matrix[i][n-1-j]);

            }

        }

    }

};

54.螺旋矩阵

思路:模拟矩阵的螺旋运动方式,其中的细节真的很drama,改了很多遍,尤其是右侧,下侧,左侧的补充限制条件。

class Solution {

public:

    vector<int> spiralOrder(vector<vector<int>>& matrix) {

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

        vector<int>res;

        for(int i=0;i<m-i;i++)

        {

            for(int j=i;j<=n-1-i;j++)

            {

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

            }

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

            {

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

            }

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

            {

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

            }

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

            {

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

            }

        }

        return res;

    }

};

498.对角线遍历

class Solution {

public:

    vector<int> findDiagonalOrder(vector<vector<int>>& mat) {

        vector<int>res;

        int m=mat.size();

        if(mat.size()==0)return res;

        int n=mat[0].size();

        if(n==0)return res;

        bool flag=true;

        for(int i=0;i<m+n;i++){

            int xm=flag?m:n;

            int xn=flag?n:m;

            int x=(i<xm)?i:xm-1;

            int y=i-x;

            while(x>=0&&y<xn){

                res.push_back(flag?mat[x][y]:mat[y][x]);

                x--;

                y++;

            }

            flag=!flag;

        }

        return res;

    }

};

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容