likes
comments
collection
share

算法题每日一练---第96天:数组的三角和

作者站长头像
站长
· 阅读数 34

一、问题描述

给你一个下标从 0 开始的整数数组 nums ,其中 nums[i] 是 0 到 9 之间(两者都包含)的一个数字。

nums 的 三角和 是执行以下操作以后最后剩下元素的值:

  1. nums 初始包含 n 个元素。如果 n == 1 ,终止 操作。否则,创建 一个新的下标从 0 开始的长度为 n - 1 的整数数组 newNums 。
  2. 对于满足 0 <= i < n - 1 的下标 i ,newNums[i] 赋值 为 (nums[i] + nums[i+1]) % 10 ,% 表示取余运算。
  3. 将 newNums 替换 数组 nums 。
  4. 从步骤 1 开始 重复 整个过程。

请你返回 nums 的三角和。

题目链接:数组的三角和

二、题目要求

样例

算法题每日一练---第96天:数组的三角和

输入: nums = [1,2,3,4,5]
输出: 8
解释:
上图展示了得到数组三角和的过程。

考察

1.模拟、动态规划
2.建议用时15~25min

三、问题分析

算法题每日一练---第96天:数组的三角和

做动态规划需要几步,就像冰箱装大象一样,分成三步:

第一步:含义搞懂

通常动态规划都会用数组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];
    }
};

五、测试结果

算法题每日一练---第96天:数组的三角和

算法题每日一练---第96天:数组的三角和

转载自:https://juejin.cn/post/7094598002064490527
评论
请登录