力扣 题目26-- 删除有序数组中的重复项
题目
题解
递归:(ps:感觉我用递归用魔怔了 什么都用递归)
以下面为例
初始全为0
然后将j向右移动 需要注意的是j每轮从c位置移动
一样的 不改变 继续向右移动
此时不一样了 我们就需要重新调用函数 将k更新至k+1 而c至为j 即
此时我们将c,j所在的值赋给k
然后继续重复上面步骤 向右移动了两次又不一样了 重新更新函数
这样一直到最后
此时我们一层一层返回k 别忘了接收k的时候+1
代码
1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 int changenums(vector<int>& nums,int k,int c) { 5 nums[k] = nums[c]; 6 for (int i = c; i < nums.size(); i++) { 7 if (nums[c] != nums[i]) { 8 k=changenums(nums, k + 1, i); 9 break; 10 } 11 } 12 return k; 13 } 14 class Solution { 15 public: 16 int removeDuplicates(vector<int>& nums) { 17 if (nums.empty()) { 18 return 0; 19 } 20 int length=changenums(nums, 0, 0)+1; 21 return length; 22 } 23 }; 24 int main() { 25 Solution sol; 26 vector<int> nums = { 1,1,2,5,5,6,6,6,7 }; 27 int length=sol.removeDuplicates(nums); 28 cout << length << endl; 29 for (int i = 0; i < nums.size(); i++) { 30 cout << nums[i] << endl; 31 } 32 }