C++ 跳跃游戏解题思路与代码优化:从错误到正确
"class Solution {\npublic:\n bool canJump(vector<int>& nums) {\n int*dp=new int[nums.size()];\n for(int i=0;i<nums.size()-1;i++){dp[i]=0;}\n for(int i=0;i<nums.size()-1;i++){\n for(int t=i+nums[i];t>=i;t--){\n if(dp[t]){break;}\n else{dp[t]=1;}\n }\n if(dp[nums.size()-1]!=0){return true;}\n }\n return false;\n }\n};"为什么错了这段代码存在两个问题:\n\n1. 数组dp的大小应该为nums.size(),而不是nums.size()-1,因为dp数组用来记录是否能够到达每个位置,所以需要和nums数组大小一致。\n\n2. 在第二个for循环中,内层的循环条件应为t>=0,而不是t>=i,因为需要遍历到数组的起始位置。\n\n修正后的代码如下:\n\ncpp\nclass Solution {\npublic:\n bool canJump(vector\<int\>& nums) {\n int* dp = new int[nums.size()];\n for(int i = 0; i \< nums.size(); i++) {\n dp[i] = 0;\n }\n for(int i = 0; i \< nums.size(); i++) {\n for(int t = i + nums[i]; t \>= 0; t--) {\n if(dp[t]) {\n break;\n } else {\n dp[t] = 1;\n }\n }\n if(dp[nums.size() - 1] != 0) {\n return true;\n }\n }\n return false;\n }\n};\n
原文地址: https://www.cveoy.top/t/topic/p3tn 著作权归作者所有。请勿转载和采集!