leetcode简单题目两道(1)

Problem:

You are playing the following Nim Game with your friend: There is a heap of stones on the table, each time one of you take turns to remove 1 to 3 stones. The one who removes the last stone will be the winner. You will take the first turn to remove the stones.

Both of you are very clever and have optimal strategies for the game. Write a function to determine whether you can win the game given the number of stones in the heap.

Example:

if there are 4 stones in the heap, then you will never win the game: no matter 1, 2, or 3 stones you remove, the last stone will always be removed by your friend.

Hint:

If there are 5 stones in the heap, could you figure out a way to remove the stones such that you will always be the winner?

Code:

class Solution {
public:
    bool canWinNim(int n) {
        return !(n % 4 == 0);
    }
};

说明:

这里用到的是1+3=4,就是当4出现在你面前时,你必失败,这样的话,每多一个4,你的对手都会将他消除,所以,只要是4的倍数,就必输。而只要不是4的倍数,你就可以将它变成4的倍数,从而必胜。

 

Problem

Given an integer array nums, find the sum of the elements between indices i and j (i ≤ j), inclusive.

Example:

Given nums = [-2, 0, 3, -5, 2, -1]

sumRange(0, 2) -> 1 sumRange(2, 5) -> -1 sumRange(0, 5) -> -3

Code

class NumArray {
public:
    NumArray(vector<int> &nums) {
        data = nums;
    }

    int sumRange(int i, int j) {
        if (i < 0 || j >= data.size() || i > j) {
            return 0;
        }
        int result = 0;
        for (int k = i; k <= j; k++) {
            result += data[k];
        }
        return result;
    }
private:
    vector<int> data;
};


// Your NumArray object will be instantiated and called as such:
// NumArray numArray(nums);
// numArray.sumRange(0, 1);
// numArray.sumRange(1, 2);

说明:

这个应该没啥可说的,就是初始化好了,取相应下标之间的数作和,不过第一次提交失败了,踩了java的坑了,定义成员变量用的是nums,直接this.nums了,,应该是this->nums的。

 

 

感觉似乎有点与初衷相悖了,因为总是从自己的私库里取东西发表,应该写新的的。

 

 

 

posted @ 2017-04-15 01:10  鹰搏长空08  阅读(288)  评论(0编辑  收藏  举报