zhxue_11 2018-10-09 07:58 采纳率: 0%
浏览 507
已采纳

leetcode66题,最简单的思路,某个时候没法通过

用的C++

 class Solution {
public:
    vector<int> plusOne(vector<int>& digits) {
        const int n = digits.size();
        vector<int> result;
        long int num=0;
        for(int i = 0;i < n;i++){
            num += digits[i]*pow(10,n-i-1);
        }
        num++;
        while(num > 0){
            int i = num % 10;
            num /= 10;
            result.push_back(i);
        }
        reverse(result.begin(),result.end());
        return result;
    }
};

输入: [6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]
输出: [6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,4,0,9]
预期: [6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,4]
不一样,通过109个例子中的79个

  • 写回答

1条回答 默认 最新

  • cold_windx 2018-10-09 10:14
    关注

    for循环里改成这个num += digits[i]*(long int)pow(10,n-i-1);pow默认返回int,丢失精度;
    另外这题你这么做AC不了的应该,给的数据范围已经超long long了,你应该模拟数学加法运算去做。这是我AC的代码
    class Solution {
    public:
    vector plusOne(vector& digits) {
    int n = digits.size();
    if(0 == n) return vector{0};
    vector ans;
    int c = 1; //进位
    for(int i = n - 1; i >= 0; --i)
    {
    ans.push_back(digits[i] + c);
    c = ans[ans.size() - 1] / 10;
    ans[ans.size() - 1] %= 10;
    }
    if(1 == c)
    {//在首位加1
    ans.push_back(1);
    }
    reverse(ans.begin(), ans.end());
    return ans;
    }
    };

    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数