给一个mn矩阵,将该矩阵中出现0元素的位置的行列均置为0。
最简单的方法,开一个mn的矩阵记录,再设置就行了。
更简单的是:开一个m+n的矩阵记录行列就可以了。
更更简单的常数空间的方法,我想了一种,有点问题,正在琢磨,先把m+n的解法贴出来吧。
一次AC。
附上代码:
class Solution {
public:
void set……
这个题因为原链接的图片挂了,不过根据题意,题意是:给一个m*n的矩阵,问有多少条路径可以从(0,0)点到(m-1,n-1)点。
走路的规则是 一步只能从当前点往右或者往下走。
宽度优先搜索。
附上代码:
一次AC。目测代码性能还是不够好。
struct PPoint
{
int x;
int y;
};
class Solution {
public:
bool C……
将一个n*n的矩阵顺时针旋转90度,额外地,能不能原地旋转,就是不开辟额外的空间。
一次AC,每个位置上的旋转只会影响4个位置上的数组,开一个tmp,搞定。
附上代码:
class Solution {
public:
void MoveStep(vector<vector<int>> &matrix,int i,int j,int n)
{
in……
给出n个数,里面每个数字重复3次,只有一个数字只出现一次,求该数字[线性时间和空间]
相信两个数的大家都会,异或就行。
其实最开始用mapA过,觉得不符合题意,看了别人的思路,知道了,其实就是题目的变形,感觉不会举一反三,而且对问题的分析能力不够。
异或的目的就是计数每个位置出现1的个数,如果有两次就清零。
……
给定数n,生成所有的n个括号的情况。
比如n=2:(()),()()
这个题,回溯搜索所有情况即可:
class Solution {
public:
vector<string> ans;
void genStep(string &item,int n,int countLeft,int countRight)
{
if(countLeft == n && countRight == n)
{
ans.pu……
这个题,我很无奈,不能special judge。好吧开始写了一个代码 WA,人说 sorry 不能sp,于是按照样例改了改。
思想就是
0
1
在序列中的每个数前面[样例]或者后面加上(0,1),(1,0),(0,1),(1,0),(0,1),(1,0)……即可[每个数,生成两个新的数],这样保证了只改变一个位数,因为上一轮的数是按照跪着的。……
这个题其实就是个模拟题,两两交换listnode的节点,基于node而非val。蛮简单的,但是我自己确实憋了好久,一次AC,但是感觉自己的代码写出来永远不美,复用性不高。逻辑不行。还得加油。
附上代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* Lis……
注意什么都不输入的越界问题。
每次二分,因为排好序,以中点为根即可。
子树同理。
附上代码:
class Solution {
public:
TreeNode *sortedArrayToBST(vector<int> &num) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance wil……
判断一棵树是否是平衡的二叉查找树。
一次AC附上代码:[原以为自己会超时的]
class Solution {
public:
bool ans;
bool isBalanced(TreeNode *root) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
……
red white blue 三种颜色
分别用0 1 2代表
输入一个0 1 2 的数组,请排序。
但是不允许用封装好的库。
具体的方法是遍历该数组对012进行计数,然后对原数组覆盖即可。
附上代码:
class Solution {
public:
void sortColors(int A[], int n) {
// IMPORTANT: Please reset any member data you declared, as……