zoukankan      html  css  js  c++  java
  • 剑指offer[面试题17:打印从1到最大的n位数]

    题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的三位数999.

    思路:

    隐藏考点:当输入的n很大时,用整型(int)或者长整型(long int)求最大的n位数都会溢出。也就是需要考虑大数问题。

    用递归实现全排列,数字(用字符串容器装)的每一位都是0~9中的一个数,然后设置下一位。递归结束的条件是已经设置了数字的最后一位。

    class Solution {
    public:
    	void PrintMaxOfDigits(int n){
    		if (n <= 0)
    			return;
    		vector<char> number(n,0);
    		for (int i = 0; i < 10; i++){
    			number[0] = i + '0';  // int+char得到char类型的0-9
    			printRecursively(number, n, 0);
    		}
    	}
    
    	// 最好以地址形式传入,vector<char> &number
    	void printRecursively(vector<char> &number, int length, int index){
    		if (index + 1 == length){
    			printNumber(number);
    			return;
    		}
    		for (int i = 0; i < 10; i++){
    			number[index + 1] = i + '0';
    			printRecursively(number, length, index + 1);
    		}
    	}
    
    	void printNumber(vector<char> &number){
    		int sum = 0;
    		for (int i = 0; i < number.size(); i++){
    			sum = sum * 10 + (number[i]-'0');
    		}
    		cout << sum << endl;
    	}
    	
    
    };
    

      

  • 相关阅读:
    mvc与springmvc
    mybatis一级与二级缓存详解
    resultType和resultMap的使用场景
    mybatis第一天学习总结
    linux常用命令(不断更新)
    SSH基本框架搭建的详细过程
    hibernate多条件组合查询的两种方式
    AJAX验证用户名是否被注册
    Vimrc
    关于window.open在不同浏览器的不同点
  • 原文地址:https://www.cnblogs.com/nicetoseeyou/p/11382045.html
Copyright © 2011-2022 走看看