LeetCode题解:2079. 给植物浇水


遇到不会的多想想,又不是做不出来,别总问别人。实在不行…
在这里插入图片描述

题目

1、题目描述

你打算用一个水罐给花园里的 n 株植物浇水。植物排成一行,从左到右进行标记,编号从 0 0 0 n − 1 n - 1 n1 。其中,第 i i i 株植物的位置是 x = i x = i x=i x = − 1 x = -1 x=1 处有一条河,你可以在那里重新灌满你的水罐。
每一株植物都需要浇特定量的水。你将会按下面描述的方式完成浇水:
  按从左到右的顺序给植物浇水。
  在给当前植物浇完水之后,如果你没有足够的水 完全 浇灌下一株植物,那么你就需要返回河边重新装 满水罐。
  你不能提前重新灌满水罐。
最初,你在河边( x = − 1 x = -1 x=1),在 x x x 轴上每移动 一个单位 都需要 一步 。
给你一个下标从 0 0 0 开始的整数数组 p l a n t s plants plants ,数组由 n n n 个整数组成。其中, p l a n t s [ i ] plants[i] plants[i] 为第 i 株植物需要的水量。另有一个整数 c a p a c i t y capacity capacity 表示水罐的容量,返回浇灌所有植物需要的 步数 。

2、原题链接

给植物浇水

解题报告

1、解题思路

在这里插入图片描述
  (1)当前植物浇水的步数与之前已经浇水的步数之和为从开始到现在的总步数。
  (2)如果当前植物所需水量 > > > 水壶中剩余水量那么就回去灌水再浇。所需步数为: 2 ∗ x + 1 2 * x + 1 2x+1
  (3)如果当前植物所需水量 ≤ \le 水壶中剩余水量。步数加一。
  (4)更新水壶中水的量。

2、解题方法

  DFS

2、代码详解

int dfs(int cap, int* plants, int plantsSize, int step, int capacity){
    if(plantsSize == step){
        return 0;
    }
    int ans = 0;
    int Cap = cap;
    if(plants[step] > cap){
        ans += step*2 + 1;
        Cap = capacity - plants[step];
    }else{
        ++ans;
        Cap -= plants[step];
    }
    ++step;
    return ans + dfs(Cap, plants, plantsSize, step, capacity);
}

int wateringPlants(int* plants, int plantsSize, int capacity){
    return dfs(capacity, plants, plantsSize, 0, capacity);
}

总结

  其实模拟题枚举就过了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值