Bootstrap

c++ 力扣题(1)JZ64

JZ64求1+2+3+...+n_牛客题霸_牛客网

因此不能使用等差求和(禁掉位运算为了禁掉等差求和,右移一位就是等差除二)、循环、递归来解决

我们运用到在

统计构造次数所学到的内容:

1.可以利用静态全局变量的思想来做

2.构造n次对象,可以创建一个具有n个同类型对象的数组

class Sum{
public:
    Sum()
    {
        _ret+=_i;
        ++_i;
    }
    static int GetRet()
    {
        return _ret;
    }

private:
    static int _i;
    static int _ret;
};

int Sum::_i = 1;
int Sum::_ret = 0; 

class Solution {
public:
    int Sum_Solution(int n) {
        //构造n个对象
        //创建一个数组,内有n个数据
        Sum a[n];
        
        return Sum::GetRet();
    }
};

这样便解决问题:

我们还可以运用到:使用内部类(因为Sum类本身就只给Solution类使用,不希望其他访问到Sum类):

class Solution {
public:

class Sum{
public:
    Sum()
    {
        _ret+=_i;
        ++_i;
    }
    static int GetRet()
    {
        return _ret;
    }

private:
    static int _i;
    static int _ret;
};


    int Sum_Solution(int n) {
        //构造n个对象
        //创建一个数组,内有n个数据
        Sum a[n];
        
        return Sum::GetRet();
    }
};

int Solution::Sum::_i = 1;
int Solution::Sum::_ret = 0; 

还可以再优化:

将内部所定义的变量直接在外部类定义,这样就不用再写Get函数

class Solution {
public:
class Sum{
public:
    Sum()
    {
        _ret+=_i;
        ++_i;
    }

};
    int Sum_Solution(int n) {
        //构造n个对象
        //创建一个数组,内有n个数据
        Sum a[n];
        return _ret;
    }    
private:
    static int _i;
    static int _ret;
};

int Solution::_i = 1;
int Solution::_ret = 0; 

Sum 类天生是Solution类的友元类,资源共享

;