題目
連結
LeetCode 1103[分糖果II]
詳情
例項
提示
題解
思路
定義容器vecRet,使每個元素值均為0,即代表每個孩子手上開始都是0個糖果
定義iCount為預設的糖果數量,初始值為1
逐個遍歷容器,也就是開始給每個孩子分糖果 獲取容器當前元素值,即每個孩子當前的糖果數量iAt
如果糖果數量candies不小於每個孩子預設要分發的糖果數量iCount,則該孩子分到的糖果數量為預設數量,即iCount
此時孩子手上的糖果數量為iAt + iCount
剩餘糖果數量為:candies - iCount
下一個孩子需要分發的預設糖果數量為:iCount++
繼續遍歷,如果遍歷到最後一個孩子時,手上還有剩餘糖果,則又開始從第一個孩子開始遍歷
直到糖果數量candies小於該孩子預設要分發的糖果數量iCount,則把剩餘的糖果全部分發給孩子,即分發後孩子的糖果數量為:iAt + candies,此時,剩餘糖果數量為0,則退出迴圈
程式碼
class Solution {
public:
vector<int> distributeCandies(int candies, int num_people) {
vector<int> vecRet;//定義容器
for (int i = 0; i < num_people; i++)//初始化容器初值為0
vecRet.push_back(0);
int iCount = 1;//預設分發糖果數量
for (int i = 0; i < num_people; i++)//遍歷開始分糖果
{
int iAt = vecRet.at(i);//取當前元素的糖果數量
if (candies < iCount)//不夠分
{
iAt += candies;//全部分掉
vecRet.at(i) = iAt;
break;//結束
}
iAt += iCount;//分發預設數量的糖果
vecRet.at(i) = iAt;
if (num_people - 1 == i)//最後一個元素,賦值-1,然後迴圈+1變成0,即變成初始元素
i = -1;
candies -= iCount;//剩餘糖果數量=當前糖果數量-預設分發的糖果數量
iCount++;//預設分發糖果數量+1
}
return vecRet;
}
};