程序员面试金典

    科技2022-07-15  124

    面试题 08.01. 三步问题

    class Solution { public: int waysToStep(int n) { vector<int>dp(n+3); dp[0]=0;dp[1]=1;dp[2]=2;dp[3]=4; for(int i=4;i<=n;i++) { dp[i]=((dp[i-3]+dp[i-2])%1000000007+dp[i-1])%1000000007; } return dp[n]; } };

    面试题 08.02. 迷路的机器人

    class Solution { public: int m,n; vector<vector<int> > path; vector<vector<bool> > visited; int dx[2]={0,1},dy[2]={1,0}; vector<vector<int>> pathWithObstacles(vector<vector<int>>& obstacleGrid) { if(obstacleGrid.empty()||obstacleGrid[0].empty())return path; m = obstacleGrid.size(),n=obstacleGrid[0].size(); visited = vector(m,vector<bool>(n,false)); dfs(obstacleGrid,0,0); return path; } bool dfs(vector<vector<int>>& obstacleGrid,int x,int y){ if(x>=m||y>=n||obstacleGrid[x][y]==1||visited[x][y])return false; if(x==m-1&&y==n-1){ path.push_back({x,y}); return true; } path.push_back({x,y}); visited[x][y]=true; for(int i=0;i<2;++i)if(dfs(obstacleGrid,x+dx[i],y+dy[i]))return true; path.pop_back(); return false; } };

    面试题 08.03. 魔术索引

    class Solution { public: int findMagicIndex(vector<int>& nums) { int n=nums.size(); for(int i=0;i<n;i++) { if(nums[i]==i) return i; } return -1; } };

    面试题 08.04. 幂集

    class Solution { public: vector<vector<int>> subsets(vector<int>& nums) { //模拟手动,如数字为3 1初始为[],插入3,则变为[]、3,插入1,则变为[]、3、1、3 1 vector<vector<int>>res; res.push_back({}); int i=0; while(i<nums.size()) { int size=res.size(); for(int j=0;j<size;j++) { vector<int> ans(res[j].begin(),res[j].end()); ans.push_back(nums[i]); res.push_back(ans); } i++; } return res; } };

    面试题 08.05. 递归乘法

    class Solution { public: int multiply(int A, int B) { if(B==0) return 0; return multiply(A,B-1)+A; } };
    Processed: 0.011, SQL: 8