您的位置:首页 > 编程语言 > C语言/C++

几道简单题,运用一些常用的C++函数,可以比较顺手

2014-06-15 14:06 423 查看
整数加1,发现当9,99或999这类数的时候,比较麻烦,因为要整个挪动,其实也可以专门处理这种情况,我猜应该也可以过,这里运用了之前掌握的reverse操作,

附上代码,逻辑可能有点丑陋:

vector<int> plusOne(vector<int> &digits) {
        if(digits.size()==1)
        {
            digits.at(0)+=1;
            if(digits.at(0)==10)
            {
                digits.at(0)=1;
                digits.push_back(0);
            }
            return digits;
        }
        reverse(digits.begin(),digits.end());
        
        int i=0;
        digits.at(i)+=1;
        while(i<=digits.size()-2&&digits[i]==10)
        {
            digits[i]=0;
            digits[i+1]+=1;
            i++;
        }
        if(i==digits.size()-1)
        {
            if(digits[i]==10)
            {
                digits[i]=0;
                digits.push_back(1);
            }
        }
        
        reverse(digits.begin(),digits.end());
        return digits;
    }


另外还有一道简单题,因为参数是const char* 如果用strtok的话 要先拷出来,然后可能会慢一些,不知道是不是时间过不去

我立马用了之前总结的stringstream,很爽,附上代码:

int lengthOfLastWord(const char *s) {
        string str=s;
	string tmp;
	istringstream istr(str);
	int length=0;
	while(istr>>tmp)
	{
		length=tmp.size();
	}
	return length;
    }


树自身对称:

bool T1SymmetricT2(TreeNode* T1, TreeNode* T2)
    {
        if(T1==NULL&&T2==NULL) return true;
        if((T1==NULL&&T2!=NULL)||(T1!=NULL&&T2==NULL)) return false;
        return (T1->val==T2->val) && T1SymmetricT2 (T1->left, T2->right) && T1SymmetricT2 (T1->right, T2->left);
    }
    bool isSymmetric(TreeNode *root) {
        if(root==NULL) return true;
        return T1SymmetricT2(root->left, root->right);
    }


这是目前第一个写了两个函数的题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: