牛客刷题

iii.run

科室素拓活动

科室素拓进行游戏,游戏规则如下:随机抽取9个人作为游戏参与人员,分别编号1至9,每轮要求k(k<=9且k>=0)个人自由组合使编号之和为n。输出满足规则的所有可能的组合。要求组合内部编号升序输出,组合之间无顺序要求。

输入描述:

输入数据为以空格分隔的两个整数k和n

输出描述:

每行输出一个可能的编号组合,组合内部各个编号以空格分隔升序输出。若无满足规则的组合,则输出None

示例1

输入

3 15

输出

1 5 9
1 6 8
2 4 9
2 5 8
2 6 7
3 4 8
3 5 7
4 5 6

其实是个背包问题

s = input().split(" ")
#s = "3 15".split(" ")
k = int(s[0])
n = int(s[1])
test = 1
answer = []
def sumOfNumber(sum,n,k):
    if sum<=0 or n<=0 :
        return
    if sum==n and k == 1:
        global test
        test = 2
        answer.reverse()
        print(n,end=" ")
        for i in answer:
            print(i,end=" ")
        print()
        answer.reverse()
    answer.append(n)
    sumOfNumber(sum-n,n-1,k-1)
    answer.remove(n)
    sumOfNumber(sum,n-1,k)
sumOfNumber(n,9,k)
if test == 1:
    print('None')

字符串处理

请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
python

# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        new = []
        j = 0
        for i in s:
            if i != " ":
                new.append(i)
            else:
                new.append('%20')
        return ''.join(new)

cpp

class Solution {
public:
    void replaceSpace(char *str, int length) {
        int newlength = 0;
        int oldlength = 0;
        int j = 0;
        while (str[j]) {
            newlength++;
            oldlength++;
            if (str[j] == ' ') {
                newlength = newlength + 2;
            }
            j++;
        }
        str[newlength] = 0;
        for (int i = oldlength - 1,j = newlength-1; i >= 0; i--, j--) {
            if (str[i] == ' ') {
                str[j] = '0';
                str[--j] = '2';
                str[--j] = '%';
            }
            else {
                str[j] = str[i];
            }
        }
    }
};

重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

class Solution {
public:
    TreeNode* reConstructBinaryTree(vector pre, vector vin)
    {
        if (pre.empty() || vin.empty()) {
            return NULL;
        }
        vector preleft, preright, vinleft, vinright;
        int val = pre[0];
        TreeNode *root = new TreeNode(val);
        int pos;
        for (pos = 0; pos < vin.size(); ++pos) {
            if (vin[pos] == val)
                break;
        }
        for (int i = 0; i < vin.size(); ++i) {
            if (i < pos) {
                vinleft.push_back(vin[i]);
                preleft.push_back(pre[i + 1]);
            }
            else if(i>pos){
                vinright.push_back(vin[i]);
                preright.push_back(pre[i]);
            }
        }
        root->left = reConstructBinaryTree(preleft, vinleft);
        root->right = reConstructBinaryTree(preright, vinright);
        return root;
    }

};

用两个栈实现队列

class Solution
{
public:
    void push(int node) {
        int size1 = stack2.size();
        for (int i = 0; i < size1; i++) {
            int temp = stack2.top();
            stack2.pop();
            stack1.push(temp);
        }
        stack1.push(node);
        int size2 = stack1.size();
        for (int i = 0; i < size2; i++) {
            int temp = stack1.top();
            stack1.pop();
            stack2.push(temp);
        }
    }

    int pop() {
        int temp = stack2.top();
        stack2.pop();
        return temp;
    }

private:
    stack stack1;
    stack stack2;
};

你可能感兴趣的:(牛客刷题)