算法题每日一练---第96天:数组的三角和
一、问题描述
给你一个下标从 0 开始的整数数组 nums
,其中 nums[i]
是 0
到 9
之间(两者都包含)的一个数字。
nums
的 三角和 是执行以下操作以后最后剩下元素的值:
nums
初始包含n
个元素。如果n == 1
,终止 操作。否则,创建 一个新的下标从 0 开始的长度为n - 1
的整数数组newNums
。- 对于满足
0 <= i < n - 1
的下标i
,newNums[i]
赋值 为(nums[i] + nums[i+1]) % 10
,%
表示取余运算。 - 将
newNums
替换 数组nums
。 - 从步骤 1 开始 重复 整个过程。
请你返回 nums
的三角和。
题目链接:数组的三角和
二、题目要求
样例
输入: nums = [1,2,3,4,5]
输出: 8
解释:
上图展示了得到数组三角和的过程。
考察
1.模拟、动态规划
2.建议用时15~25min
三、问题分析
做动态规划需要几步,就像冰箱装大象一样,分成三步:
第一步:含义搞懂
通常动态规划都会用数组dp[]存放东西,那存放在数组里面的究竟是什么?
这明显是一道杨辉三角的倒置,我一开始是使用二维数组存储数据。
第二步:变量初始
这一题要初始化最后一行的变量,直接复制到数组中。
第三步:关系归纳
关系和杨辉三角差不多,当前数据由下一行的左右两个数字相加得到,不过要注意题目中的要求,取模。
dp[i][j]=(dp[i+1][j]+dp[i+1][j+1])%10;//关系归纳
三步走,打完收工!
四、编码实现
class Solution {
public:
int triangularSum(vector<int>& nums) {
int i,j,dp[1005][1005];//初始化数据
int n=nums.size();
for(i=n-1;i>=0;i--)//循环判断
{
for(j=0;j<=i;j++)
{
if(i==n-1)
dp[i][j]=nums[j];//变量初始
else
dp[i][j]=(dp[i+1][j]+dp[i+1][j+1])%10;//关系归纳
}
}
return dp[0][0];
}
};
五、测试结果
转载自:https://juejin.cn/post/7094598002064490527