leetcode_数组_相关内容_1(48-66-88-118-119)

对于自己之前写的内容应该做更好的梳理。

1. 48:Rotate Image 传送门:https://leetcode.com/problems/rotate-image/

  大意:给出n*n的一个矩形,进行90‘顺时针旋转。

题解:1.思路:对矩阵,第i行j列的元素逆转过来后就是另一个矩阵的j行n-i列。

AC代码如下:

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int length=matrix.size();
        if(matrix.empty()) return;
        vector<vector<int> > ans(matrix.size());
        for(int i=0;i<matrix.size();i++)
            ans[i].resize(length);

        if(matrix[0].size()!=1){
        
        
        for(int i=0;i<length;i++)
            for(int j=0;j<length;j++)
                ans[j][length-1-i]=matrix[i][j];
        for(int i=0;i<length;i++)
            for(int j=0;j<length;j++)
                matrix[i][j]=ans[i][j];
        }


    }
};

2. 66:Pluse One 传送门: https://leetcode.com/problems/plus-one/

大意:一个数组表示的是一个数,对它执行加1操作。 most significant digit:最高有效位(CSAPP)

题解:进行模拟操作。注意如果最后还有进位的话,则要在数组前再加1个1。

AC代码:

class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        if(digits.empty()) return digits;
        int length=digits.size();
        int carry=1;
        int sum;
        for(int i=length-1;i>=0;i--)
        {
        	sum=digits[i]+carry;
        	digits[i]=sum%10;
        	carry=sum/10;
        }
        
        if(carry==1) digits.insert(digits.begin(),1);
        return digits;
    }
};


3. Pacical Triangle

大意:帕斯卡三角形是数组里的必考题。

题解:模拟操作。每次都加入1后用公式计算出结果。注意一些特殊情况(empty(),只有1个等)

AC代码:

class Solution {
public:
    vector<vector<int>> generate(int numRows) {
    	vector<vector<int> > ans;
    	if(numRows==0) return ans;
    	ans.resize(numRows);
    	ans[0].push_back(1);
    	//if(numRows==1) return ans;
    	for(int i=1;i<numRows;i++)
    	{
    		ans[i].push_back(1);
    		for(int j=0;j<ans[i-1].size()-1;j++)
    		{
    			int temp=ans[i-1][j+1]+ans[i-1][j];
    			ans[i].push_back(temp);

    		}
    		ans[i].push_back(1);
    	}
    	return ans;
        
    }
};


4. Pasical Triangle II 

大意:是上一题的演进版,要求出三角形第几行的具体值。

题解:在上一题的代码略作修改即可。注意在定义数组ans时要定好大小。

AC代码:

class Solution {
public:
    vector<int> getRow(int rowIndex) {
        	vector<vector<int> > ans;
        	vector<int> a;
    	///if(rowIndex==0) return a;
    	ans.resize(rowIndex+1);
    	ans[0].push_back(1);
    	//if(numRows==1) return ans;
    	for(int i=1;i<=rowIndex;i++)
    	{
    		ans[i].push_back(1);
    		for(int j=0;j<ans[i-1].size()-1;j++)
    		{
    			int temp=ans[i-1][j+1]+ans[i-1][j];
    			ans[i].push_back(temp);

    		}
    		ans[i].push_back(1);
    	}
        return ans[rowIndex];
    }
};


5. 88:Merge Sorted Array  传送门:  https://leetcode.com/problems/merge-sorted-array/

大意:两个数组已经给定排序,要求返回合并后的有序数组。

题解:按照题意要求进行即可。

AC代码:

class Solution {
public:
    void merge(vector<int>& nums1, int m, vector<int>& nums2, int n) {
    	for(int i=0;i<n;i++)
    		nums1[(m+i)]=nums2[i];
    	sort(nums1.begin(),nums1.end());
        
    }
};




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值