ListNode* rotateRight(ListNode* head, int k){ if (!head)return head; int len = 1; ListNode* t = head; while (t->next) { len++; t = t->next; } k = k % len; if (!k)return head; t->next = head;
t= head; int start = len - k; while (start > 1) { t = t->next; start--; } head = t->next; t->next = NULL;
return head; }
执行用时 :8 ms, 在所有 C++ 提交中击败了86.96%的用户
内存消耗 :8.9 MB, 在所有 C++ 提交中击败了58.02%的用户
果然不错。
题目描述
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。
问总共有多少条不同的路径?
说明:m 和 n的值均不超过 100。
题解
动态规划,用一个二维数组记录路径数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
intuniquePaths(int m, int n){ int **a = newint*[n]; for (int i = 0; i < n; i++) { a[i] = newint[m]; a[i][m - 1] = 1; } for (int i = 0; i < m-1; i++) a[n - 1][i] = 1; for (int i = n-2; i >=0; i--) { for (int j = m-2; j >=0; j--) { a[i][j] = a[i + 1][j] + a[i][j + 1]; } } return a[0][0]; }
时间我很满意。
题目描述
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。